[LG CNS 6기] 본 과정 25일차 TIL / [Spring Boot] - Controller, MyBatis, 의존성 주입

김승진·2026년 9월 1일

LG CNS AM 6기 TIL

목록 보기
34/46

1. 오늘의 한 줄 요약

9월의 첫 하루!

2. 오늘 배운 것

2.1 @Controller와 @RestController

  • @Controller는 문자열을 논리적 페이지 이름으로 취급해서 ViewResolver가 prefix/suffix를 붙여 실제 JSP 파일을 찾아 반환한다.
  • @RestController는 반환값을 그대로 HTTP 응답 바디(JSON)로 내려준다.

둘 다 내부적으로 @Component가 붙어 있는 어노테이션이라, 스프링이 리플렉션으로 이 둘을 인식해서 객체 생성을 대신 관리해준다는 점은 같다.

2.2 MyBatis 연동 — 인터페이스와 XML

@Mapper 붙은 인터페이스는 메서드 명세만 있고 구현이 없다. 실제 SQL은 별도 XML 파일에 있고, namespace로 인터페이스와 연결되고, id 속성이 메서드 이름과 매칭된다. #{email}이라고 쓰면 SQL 실행 시점에 전달받은 객체의 getEmail() 메서드가 호출되고, 그 반환값이 쿼리 파라미터 자리에 들어간다. 이 XML에서 실수하기 쉬운 지점은 맨 윗줄이다. <?xml version...?> 선언 앞에 빈 줄이나 공백이 하나라도 있으면 파싱 자체가 실패한다.

2.3 IoC와 의존성 주입(DI)

객체 생성과 관리 권한을 개발자가 아니라 프레임워크(컨테이너)가 갖는 것이 IoC다. 이걸 실현하는 방법이 DI(의존성 주입)와 DL(의존성 조회)인데, Spring이 제공하는 DI 어노테이션으로는 @Autowired(타입 기준), @Resource(이름 기준), @Qualifier(같은 타입이 여럿일 때 지정), @Inject가 있다. 최근에는 생성자 주입이 권장 방식인데, Lombok의 @RequiredArgsConstructor를 쓰면 final 필드를 받는 생성자를 자동으로 만들어줘서 직접 타이핑할 필요가 없어진다.

2.4 JUnit과 테스트 3단계

@SpringBootTest를 붙인 테스트 클래스에서, 먼저 테스트 데이터를 만들고 그 데이터로 실제 로직을 실행한 다음 결과가 기대한 값과 같은지 Assertions로 비교하는 3단계로 테스트 코드를 짠다. 인터페이스인 Mapper도 @Autowired로 주입받아 테스트할 수 있는데, 컨테이너가 프록시 객체를 만들어서 관리하기 때문이다.

2.5 레이어드 아키텍처

같은 인터페이스(예: UserService)를 여러 구현체가 구현하고, @Service(value = "이름")으로 Bean 이름을 지정해두면, 컨트롤러에서 @Resource(name = "이름")으로 원하는 구현체만 골라 주입받을 수 있다. 나중에 구현을 통째로 바꿔도 인터페이스 타입은 그대로라 호출부 코드를 고칠 필요가 없다.

3. 오늘의 회고

  • 느낀 점: 폴더 구조 구성하는 것부터 복잡해서 따라가기가 조금 버거웠다. 스프링 부트의 본격적인 시작이라 그런가 내용도 갑자기 어려워진 탓에, 강의를 더 열심히 집중해서 들어야겠다는 생각이 들었다.
  • 다음에 할 것: 오늘 나온 어노테이션 정리, 복습

#LGCNS #LGCNS6기 #개발자 #LGCNSINSPIRECAMP

profile
이것저것

0개의 댓글