목록Tech/Spring Boot (10)
지나공 : 지식을 나누는 공간
현재까지 1,2 편을 적고 3을 적게 됐다. 이렇게 보니 엄청 길게 느껴졌던 내용들이 생각보다 짧은 것 같기도..? 하다.빈 생명주기 콜백과 빈 스코프가 남았다. 바로 시작! 스프링 프로그램이 시작하기 전과 후에 무언가 부가적인 작업을 해줘야 할 때가 있다. 예를 들면 데이터베이스 커넥션 풀이나 네트워크 소켓 등이 있다. 애플리케이션이 시작될 시점에 미리 필요한 연결을 해둬야 하고, 종료될 쯤에는 연결됐던 걸 다시 해제하는 작업이 필요하다. 이러한 부가 작업들은 주요 프로그램이 실행되기 전과 후에 각각 이루어져야 한다. 이번 시간에는 네트워크 소켓을 담당하는 NetworkClient라는 객체를 만들어서 테스트한다. 네트워크 소켓을 담당하는 빈이기 때문에 이 빈의 로직이 실행되기 전에 네트워크 연결이 세팅..
개요지난 시간에는 Spring이 객체지향원칙을 지켜주는 방법의 도입부. 즉 그냥 단순하게 개발하면 어디서 SOLID 원칙이 여겨지는지 알아보고 스프링 컨테이너를 사용하면 그걸 어떻게 해결해주는지를 알아봤다. 그중에서도 ApplicationContext(스프링컨테이너)를 활용해서 싱글톤 빈을 관리하는 것까지 봤는데, 이번에는 그 활용 자체를 좀 더 편하게 하도록 스프링이 뭘 제공해주는지 보고 그 외 여러가지 스프링 기능들도 볼 예정이다. 영한님 강의 중 핵심원리 기본편의 마무리 글이다. 얼른 끝내고 MVC로 가자! 아래 포스팅에 이어지는 내용이다.https://eocoding.tistory.com/120 Spring 핵심 원리 기본편Spring 핵심 원리를 오고가면서 쓰윽 들었다. 그래서 그간의 테스트 코..
Spring 핵심 원리를 오고가면서 쓰윽 들었다. 그래서 그간의 테스트 코드들을 살펴보면서 아주 퀵하게 정리해보려 한다. 이미 너무나 유명한 영한님 강의!ㅎㅎ 좀 오글거리는 소제목들이 있지만 난 이렇게 써야 이해가 잘 가서 부끄러워도 그냥 썼다. 예제에 필요한 클래스들을 대충 정리하자면 아래와 같다.Member 관련MemberMemberRepository : 멤버 저장 DAOMemberService : 멤버Repository를 호출해서 실제 회원가입과 회원찾기 기능을 해주는 부분Grade enum : 등급별로 멤버들의 할인정책이 바뀌기 때문에 어떤 등급의 멤버인지 등록할 때 사용한다.Order 관련OrderService : 주문 생성에는 멤버정보 / 할인정보 / 상품정보가 필요하다.OrderService..
토비의 스프링을 읽고 정리했다. 티스토리가 사라져버린 그 날에 노션에 정리했던 걸 옮겨본다.https://selective-bathtub-e65.notion.site/f72b75db1b8945e089d00b01c9bb5ada 목차 목차만 보고 절차를 대충 상기할 수 있으므로 목차는 매우 중요하다...ㅎㅎ 1.1 초난감 DAODAO : 데이터를 조회하거나 조작하는 기능을 전담하는 오브젝트 책에서 초반에 DAO를 하나 만들었다. 데이터를 추가하는 add 메소드 안에는 세 가지 관심사항이 같이 들어있다.DB Connection을 가져오는 부분실제 SQL Statement를 만들고 실행하는 부분작업을 마친 뒤 Statement와 Connection 오브게트를 닫는 부분→ 왜 초난감 DAO인걸까? 문제점이 뭔..
지금까지의 흐름, 객체 지향 설계 원칙을 따를 때 의존성 주입이 왜 필요했는지 정리해보자. 지금까지의 흐름과 DI의 필요성 1. 새로운 할인 정책 개발 다형성 덕분에 새로운 정률 할인 정책 코드를 추가로 개발하는 것까진 문제가 없다. 2. 새로 만들어진 정률 할인 정책을 적용할 때 문제 발생 새로 개발한 정률 할인 정책을 적용하려고 했더니, 클라이언트 코드인 주문 서비스 구현체 (OrderSerivceImpl)의 코드도 같이 변경해야 했다. 왜냐면 여기서 직접적으로 DiscountPolicy를 FixDiscountPolicy로 구현하고 있었기 때문이다. 얘를 RateDiscountPolicy로 변경하는 순간 DIP 위반이라는 문제가 발생한다. 3. 관심사의 분리 애플리케이션을 하나의 공연으로 생각하자. ..
김영한 님의 강의를 참고했습니다. 객체지향설계의 원칙은? SRP(Single Responsibility Principle) 단일책임 원칙 한 클래스는 하나의 책임만 가진다. 변경이 있을 때 파급효과가 적으면, 다른 곳에 영향을 덜 미치면 단일책임원칙을 잘 따른것임. OCP(Open/closed principle) 개방폐쇄원칙 SW 요소는 확장에는 열려 있으나 변경에는 닫혀 있어야 한다. 확장을 하려면 당연히 기존 코드를 변경하는 것 같지만!!! 다형성을 떠올리자. 인터페이스를 구현한 새로운 클래스를 하나 만들어서 새로운 기능을 구현하잖아? 그런데 문제점이 있다. 구현 객체를 변경하려면 클라이언트 코드를 변경해야 한다는 것이다. 그래서 이걸 해결해야 한다. 객체를 생성하고 관계를 맺어주는 별도의 조립, 설..
03장 마지막 JPA Auditing으로 생성시간/수정시간 자동화하기 BaseTimeEntity는 abstract 클래스로, Entity들의 생성시간과 수정시간을 자동으로 관리하는 역할을 한다. @MappedSuperclass JPA Entity 클래스들이 BaseTimeEntity를 상속할 경우 그 필드들인 createdDate, modifiedDate를 컬럼으로 인식하도록 한다. @EntityListeners(AuditingEntityListener.class) BaseTimeEntity 클래스에 Auditing 기능을 포함시킨다. @createdDate Entity가 생성되어 저장될 때 시간이 자동저장된다. @LastModifiedDate 조회한 Entity의 값을 변경할 때 시간이 자동저장된다.
이동욱님의 '스프링부트와 AWS로 혼자 구현하는 웹서비스'를 읽고 기록하고 싶은 내용을 정리했다. JPA는 jpa 카테고리에서 자세하게 다루었으므로 기억하고 싶은 내용만 간단히 적을 예정이다. 1. 주요 어노테이션을 클래스에 가깝게 쓰자 한 클래스에 어노테이션을 여러 개 쓰는 경우가 많다. 그럴 때 순서는 중요할 수록 클래스명에 가깝게 쓰자. @Getter와 같은 롬복 어노테이션은 코드를 단순화시키지만 필수 어노테이션은 아니다. 따라서 @Entity를 클래스에 가깝게 두자. 2. Entity 클래스에서는 절대 setter 메소드를 만들지 말자 현재 위에 첨부한 사진에는 Getter만 있고 Setter는 없다. 무작정 getter/setter를 생성하면 해당 클래스의 인스턴스 값들이 언제 어디서 변해야 하..
이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹서비스'를 읽고 기록하고 싶은 내용을 적은 글입니다. 1. 코드 외 패키지명은 주로 웹사이트 주소의 역순으로 한다. 절대 수동으로 검증하고 테스트 코드를 작성하지 않는다. 테스트 코드로 먼저 검증한 뒤 정말 못 믿겠다 싶을 때 프로젝트를 실행해서 확인한다. 2. 메인 클래스 코드 작성하기 Application 클래스는 앞으로 만들 프로젝트의 메인 클래스이다. @SpringBootApplication 스프링부트가 자동설정되게 하는 어노테이션. 스프링 Bean 읽기와 생성을 모두 자동으로 설정한다. 특히, 이 어노테이션이 있는 위치부터 설정을 읽어가므로 이 어노테이션은 항상 프로젝트의 최상단에 위치해야 한다. SpringApplication.run() m..
윈도우 기준입니다. [Gradle] Ctrl + Space : compile 메소드에 라이브러리 이름 일부에를 적고 해당 라이브러리 목록 확인할 때 사용 [인텔리제이 기능] Ctrl + Shift + A : Action 검색창 ( share on github 등을 검색할 수 있음) [깃허브] Ctrl + K : commit 창 열기 [실행] Debug -> shift + F9 Run -> shift + F10 [검색] Ctrl + F : 현 파일 내에서 검색 Ctrl + shift + F : 전체 파일 내에서 검색 Ctrl + Alt + V : builder로 객체 생성 시 객체 선언 없이 builder로 쭉 쓴 후에 단축키 클릭하면 자동으로 객체생성문 완성 Ctrl + E : 최근 열었던 파일 Ctrl..