전체 글

전체 글

    스프링 프레임워크 - 기초

    스프링 프레임워크 - 기초

    * 이 포스팅은 김영한님의 스프링 기본원리 기본편 강의 내용을 정리한 것입니다. 1. 제어의 역전(Inversion of Control, IoC) 프로그램의 제어 흐름을 직접 제어하는 것이 아니라 외부에서 관리하는 것을 제어의 역전(IoC) 이다. 기존 프로그램은 클라이언트 구현 객체가 스스로 필요한 서버 구현 객체를 생성하고, 연결하고, 실행. 즉, 클라이언트는 구현체를 직접 참조. 스프링 프레임워크는 Config를 통해서 프로그램의 흐름 제어를 할 수 있다. 예를 들면, 내부 또는 외부 저장소 사용 여부를 비지니스 로직 구현체 코드를 건드리지 않아도 Config 를 통해서 제어할 수 있다. 프레임워크와 라이브러리의 차이 프레임워크는 내가 작성한 코드를 제어하고, 대신 실행하면 프레임워크이다. 반면에 ..

    OOP 설계 실습

    OOP 설계 실습

    첫째, 비지니스 요구사항 정리 정책적으로 확실한 것과 변경가능성이 높은 지점들도 파악한다. # 비지니스 요구사항 ## 회원 - 회원을 가입하고 조회할 수 있다 - 회원은 일반과 VIP 두 가지 등급이 있다 - 회원 데이터는 자체 DB를 구축할 수 있고, 외부 시스템과 연동할 수 있다.(미확정) ## 주문과 할인 정책 - 회원은 상품을 주문할 수 있다 - 회원 등급에 따라 할인 정책을 적용할 수 있다 - 할인 정책은 모든 VIP는 1000원을 할인해주는 고정 금액 할인을 적용한다. (나중에 변경될 수 있다) - 할인 정책은 변경 가능성이 높음. 회사의 기본할인 정책을 아직 정하지 못했고, 오픈 직전까지 고민을 미루고 싶다. 최악의 경우 할인을 적용하지 않을 수 있다. (미확정) 둘째, 개발 설계 요구사항을..

    OOP(Object Oriented Programming)와 SOLID 원칙

    객체 지향 프로그래밍 프로그램을 단순한 명령어의 나열로 보는 것이 아니라, 각 독립된 단위인 객체들의 구성으로 보고 설계를 하는 것이다. 독립된 객체들은 각 역할을 맡고 있고, 유기적으로 객체 간 메시지로 소통하여 데이터를 처리한다. 객체 지향 프로그래밍의 이점은 유연하고 변경에 용이하다. 왜냐하면 독립적인 단위로 나눠져 있다보니 조립하듯 쉽게 교체 및 변경이 쉽다. 사람이 사물을 인지하고 사용하는 방식과 유사하게 설계를 할 수 있어서, 설계를 이해하기 쉽다. 객체 지향 특징 추상화,캡슐화,상속,다형성이 있지만 다형성이 중요하다. 다형성 역할과 구현으로 구분하여, 하나의 역할에 여러 구현체들을 사용할 수 있다는 것이다. 기존 설계를 유지하면서 세부적인 기능들을 변경하기 쉽다. 실세계 예시를 들면, 운전자..

    Java는 Call By Reference가 없다. Object 참조만 있을 뿐.

    Java는 Call By Reference가 없다. Object 참조만 있을 뿐.

    SNS에서 지나가다 본 피드였는데, 면접 때 Java 에서 Call By Reference를 설명해보라고해서 JAVA 에서는 Call by value만 있다고 했다가 면접을 떨어졌다든 출처불명의 이야기를 들을 수 있었다. 옆사람에게 Java 에서는 Call By Value만 있는지 Java Code로 설명해보려다 Object 참조와 헷갈려서 제대로 설명을 못했다. 그러다 주말에 언뜻 생각나서 정리해보려고 메모리 구조를 그려보며 C언어 방식과 비교하니 다시 이해가 되었다. Call By Refercne란 함수 호출 시, 매개변수에는 '메모리 주소'가 복사되어 할당된다. 이렇게 하면, 메모리 주소를 통해 메모리 저장소에 접근하여 값을 변경할 수 있다. Call By Value란 함수 호출 시, 매개변수에는 ..

    ERD 란 무엇이고 어떻게 사용할까?

    ERD 란 무엇이고 어떻게 사용할까?

    시작하며 새로운 프로젝트를 하기에 앞서, 어떤 클래스들이 필요하고 프로퍼티들은 어떤 것들이 브레인스토밍 및 간편하게 정리해보려고 ERD를 사용해보려고 합니다. 다른 사람들과 협업하려면 머리 속에 있는 시스템을 눈으로 이해할 수 있는 자료가 있어야 합니다. ERD 도구를 사용하여 저장하고 개선해나가는 것이 좋다고 생각합니다. ERD에 대한 자세한 설명, 재대로 그려진 ERD를 본적이 없어서 가장 쉬워 보이는 설명을 찾았습니다. 해당 포스팅을 완역 포스팅을 의역+코멘트해보기로 했습니다. creately.com/blog/diagrams/er-diagrams-tutorial/ ER Diagram Tutorial | Complete Guide to Entity Relationship Diagrams ER Diag..

    Ruby 언어 배우기

    반복문 10.times do |i| puts "#{i}. 안녕, 루비야!" end 10은 Integer Class 입니다. 루비는 OOP(객체 지향 프로그래밍) 기반이라 숫자도 class 입니다. times는 Integer Class의 메서드입니다. times 메서드를 매개변수인 블럭로 호출할 수 있습니다. times 메서드에 매개변수 없이 호출하면, Emulator를 반환합니다. RubyGems 루비 소프트웨어 패키지들을 쉽게 다운로드하고 설치하고 사용할 수 있는 루비 소프트웨어입니다. 라이브러리 또는 앱을 패키지한 것을 gem이라고 부릅니다. CLI로 앱처럼 사용할 수도 있고, 이것을 기반으로 새로운 앱을 만드는 재사용 용도로 많이 사용합니다. https://guides.rubygems.org/

    dpkg 패키지 매니저에서 깨진 패키지 강제 삭제하기

    sudo mv /var/lib/dpkg/info/rvm.* /tmp/ sudo dpkg --remove --force-remove-reinstreq rvm stackoverflow.com/questions/48431372/removing-broken-packages-in-ubuntu Removing broken packages in Ubuntu There was an error when I tried to remove a package, so it was left in a broken state. I tried the following: sudo dpkg --remove --force-remove-reinstreq rvm Output: (Reading database ... 41743 ... stacko..

    ruby server 실행 시, bundler 실행 버그

    ruby server 실행 시, bundler 실행 버그

    번들러를 못 찾는 버그이다. bundler.io/blog/2019/05/14/solutions-for-cant-find-gem-bundler-with-executable-bundle.html 해당 프로젝트에서 사용하는 gem들 중에 특정 bundler 버전을 요구하는 gem이 있다. 하지만 내 로컬에서는 해당 bundler 가 없을 때 발생하는 에러. $ gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)" $ gem install bundler -v "$(grep -A 1 "BUNDLED WITH" Gemfile.lock | tail -n 1)"

    Git Revert 와 Reset

    Git Revert 와 Reset

    Git 커밋을 되돌리고 싶을 때, revert와 reset 두 가지 명령어를 사용할 수 있다. 소개 reset은 커밋 히스토리까지 삭제하면서 해당 커밋지점으로 되돌린다. 장점은 말그대로 깔끔하게 되돌릴 수 있다는 것이다. 단점은 커밋 히스토리를 삭제하므로, 나중에 리셋한 행위를 돌이킬 수 없다. revert는 커밋 히스토리는 보존하며, 해당 커밋지점과 현재 커밋과 병합하면서 새로운 커밋을 생성한다. 장점은 커밋 히스토리를 보존하기 때문에 나중에 리셋한 행위를 돌이킬 수 있다. 단점은 히스토리가 남고, 병합이기 때문에 과거와 현재의 충돌지점을 손수 고쳐야 한다. 하지만 이 수고스러움 덕분에 장점이 하나 추가된다. 내가 되돌리고 싶은 코드만 골라서 돌이킬 수 있다는 점이다. 아직 remote reposito..

    Spring Data Rest 사용 후기

    Spring Data Rest 사용 후기

    기본 CRUD 기능의 HTTP API를 빠르게 만드는 방법이 없을까? Spring Data Rest 프레임워크를 알게 되었다. 일반적으로 사용하는 HTTP API가 아닌 깐깐한 Restful API를 빠르게 만들 수 있는 도구이다. 나의 결론 Restful 원칙을 지키고 간단한 기능의 API를 만드는데는 좋다. 하지만, 다양한 View의 요구사항을 만족시키는 HTTP API를 만드는데는 Spring MVC를 사용하는 것이 빠르다. 준비 사용할 패키지들을 추가한다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-bo..