본문 바로가기

분류 전체보기113

SW 마에스트로 14기 합격 후기 올해는 소프트웨어 마에스트로 14기 과정을 진행하게 되었다. 두 달이 넘는 기간 동안 준비했기 때문에 합격 소식에 많이 기뻤다. 지원 이유 처음 지원하게된 이유는 지원금 때문이었다. 12월 한 달 동안 생활비 마련을 위한 다양한 알바를 하면서, 학습하는데 시간 투자를 못했다. 소마에서 지원해주는 지원금을 통해 학습에만 몰입할 수 있는 환경을 만들고 싶었다. 작년에 우테코에서 학습에만 몰입할 수 있는 환경을 경험했기때문에, 또 다시 경험하고 싶었다. 지원 과정에서는 소마에서 다양한 기술을 경험해봐야겠다는 생각이 들었다. 우테코라는 좋은 교육 기관에서 성장을 했지만, 너무 우테코의 방식대로만 성장한 것 같았다. 돌이켜보면 개발 학습을 진행하는 동안 자바, 스프링, jpa를 이용하여 객체지향적인 코드를 작성하.. 2023. 3. 23.
Bean 객체의 생성과 소멸 스프링 컨테이너는 초기화와 종료라는 사이클을 갖는다. 이 과정에서 스프링 컨테이너 내부에 존재하는 Bean 객체 또한 컨테이너의 라이프 사이클에 따라 생성과 소멸을 진행한다. 객체 생성 → 의존 설정 → 초기화 → 소멸 스프링 컨테이너가 초기화 될 때 Bean 객체의 생성 및 의존 설정이 진행된다. 이 부분은 이전 chapter를 공부하면서 살펴볼 수 있었다. InitializingBean과 DisposableBean을 구현한다면 각각 Bean 객체가 초기화, 소멸될 때 지정된 메소드가 실행된다. 코드를 통해 확인해보자. public class MemberDao implements InitializingBean, DisposableBean { @Override public void afterPropert.. 2022. 11. 13.
@Component란? @Component Component scan은 스프링이 직접 클래스를 검색해서 빈으로 등록하는 기능이다. 클래스에 @Component를 붙이면 스캔의 대상이된다. @Component가 제공해주는 기능 다음의 코드들을 통해 학습을 진행해보자. @Component("zzz") public class MemberDao implements Dao { } MemberDao 상단에 @Component("zzz") 를 작성했다. AppCtx에는 @Component 가 붙은 클래스를 스캔하는 역할의 @ComponentScan을 붙여주었다. @Configuration @ComponentScan(basePackages = {"com.example.springtest.spring5_chapter5"}) public cla.. 2022. 11. 13.
JPA를 사용해야하는 이유 모락 프로젝트를 진행하면서 JPA를 사용했지만, 사용해야 하는 이유에 대해서 생각을 정리해보지 못했다. 단순히 SQL을 직접 작성하지 않아도 되기 때문에 사용했다고 생각해왔다. JPA를 왜 사용해야 할까? 여러 가지 이유들이 있다. 1. SQL을 직접 작성하지 않아도 된다. JPA는 실행 시점에 자동으로 SQL을 만들어서 실행하므로 직접 작성하지 않아도 된다. 그렇다면 SQL을 직접 작성한다면 어떤 문제가 발생할까? 첫 번째로 SQL에 의존적인 개발을 하게 된다. 현재 모락 테이블은 아래와 같다. 더보기 모락 테이블 스키마 CREATE TABLE member ( `id` BIGINT NOT NULL AUTO_INCREMENT, `oauth_id` VARCHAR(255) NOT NULL UNIQUE, `n.. 2022. 11. 8.
@Qualifier 알아보기 @Qualifier 란? 자동 주입 가능한 빈이 두 개 이상일 때, 자동 주입할 빈을 지정할 수 있는 어노테이션이다. 예시 코드를 통해 @Qualifier를 사용해야 하는 상황을 확인해보자. 아래와 같이 MemberDao를 자동 주입 받는 MemberService가 존재한다. 그리고 MemberDao를 자동 주입 받을 수 있게 Bean으로 등록해주는 설정 파일은 다음과 같다. 이 상황에서 MemberDao 타입의 Bean을 하나 더 생성하면 어떻게 될까? 다음과 같이 설정 파일에 memberDao2를 추가했을 때, 자동 주입을 받는 쪽에서 다음과 같은 문제가 발생한다. 자동 주입 가능한 Bean이 두 개이상이므로 특정 Bean을 주입할 수가 없어서 발생하는 문제이다. 이 문제를 해결하려면 어떻게 해야할까.. 2022. 11. 8.
스프링 DI란? DI란? Dependency Injection, 즉 의존 주입이다. 의존 주입에 대해서 알아보기 전에 의존에 대해서 알아보자. 의존이란? A객체가 B객체의 메서드를 실행하는 경우 A객체는 B객체에게 의존한다고 표현한다. A객체가 B객체에게 메시지를 보내는 경우라고 생각하자. B객체가 변경될 때 A객체도 변경된다면 A객체가 B객체에게 의존하는 것이다. 의존 주입을 해야하는 이유? 의존하는 객체를 직접 생성한다면 변경에 유연하게 대처할 수 없다. 예시를 통해 확인해보자. public class Service { private Dao dao = new MemberDao(); } public class Service { private Dao dao = new UserDao(); } 위와 같이 Dao객체를 직접 .. 2022. 11. 6.
스프링이 Bean 객체를 관리하는 방법 Bean 객체란? 스프링이 생성하고 관리하는 객체를 Bean 객체라고 한다. 아래의 예시를 통해 학습을 진행해보자. @Configuration public class AppContext { @Bean public Member 멤버() { return new Member("박성우"); } } @Configuration 애노테이션은 해당 클래스를 스프링 설정 클래스로 지정한다. @Bean 애노테이션을 붙인 메서드가 반환하는 객체를 스프링에서 관리한다. 메서드의 이름인 멤버는 빈 객체를 구분할 때 사용된다. 멤버라는 이름을 가진 빈 객체를 조회하면 미리 저장되어있던 Member("박성우") 객체가 반환된다. 빈 객체 등록과 조회는 다음처럼 진행할 수 있다. public class Main { public st.. 2022. 11. 6.
테스트를 통해 JPA Entity 영속성에 대해 알아보자 (2) 예시로 사용된 코드는 깃허브를 통해 확인할 수 있습니다. 1편에 이어서 작성하는 글입니다. 이 글에서는 EntityManager의 merge 메서드에 대해 다룹니다. 학습을 진행하면서 이미 id 필드가 존재하는 Entity를 save 하면 어떻게 될까? 에 대한 의문이 생겼습니다. 이에 대해서 테스트를 진행하고, 헷갈리는 부분에 대해 정리해볼 수 있었습니다. 테스트는 아래의 Member Entity를 이용하여 진행하였습니다. 1. 이미 저장된 id를 가지는 Entity를 또 save 하면 어떻게 될까? 이에 대해 다음과 같은 테스트를 작성해보았습니다. 멤버1을 저장하고 멤버 1의 id를 이용해 멤버 2를 저장하였습니다. 이때 멤버 2를 저장하였지만, 저장된 결과로 반환된 저장된_멤버 2와는 다른 객체로 .. 2022. 8. 29.
테스트를 통해 JPA Entity 영속성에 대해 알아보자 (1) 예시로 사용된 코드는 깃허브를 통해 확인할 수 있습니다. 모락 프로젝트를 진행하면서 다양한 상황에서 영속성이 어떻게 적용되는지에 대해 정확하게 알지 못하고 JPA를 사용해왔습니다. 따라서 테스트를 통해 영속성에 대한 학습을 진행해보았고 헷갈리는 부분에 대해 정리해볼 수 있었습니다. 1편에서는 EntityManager의 persist 메서드에 대해, 2편에서는 merge 메서드에 대해 다룰 예정입니다. 테스트는 아래의 Member Entity를 이용하여 진행하였습니다. 1. save 하려는 Entity 객체와 save 후 반환되는 Entity 객체는 동일한 객체일까? 다음의 테스트를 통해 살펴보겠습니다. 위의 테스트는 통과합니다. save 하려고 만든 멤버 객체와 save 후 반환되는 저장된_멤버 객체가 .. 2022. 8. 29.