본문 바로가기

웹/Spring

(6)
[Spring] Spring과 JPA를 사용해보기 - 학식 취향분석 프로그램 (1) haksik-personalized 스프링 부트를 이용하여, 사용자 취향에 맞는 학식 메뉴를 추천해주는 간단한 프로그램을 구성해보았다. 이 프로젝트는 이전에 React와 코사인 유사도 알고리즘을 사용하여 만들었던 음식점 추천 시스템을 스프링 부트와 비슷하게 재구성하였다. 현재는 취향 분석의 여러개의 값이 존재하지 않아 평가된 메뉴 점수의 평균값만으로 취향을 분석하여 추천한다. 학식 메뉴를 제공하고, 사용자가 각 메뉴를 "좋아요", "보통이에요", "싫어요"로 평가할 수 있다. 사용자가 평가를 진행하면 각 메뉴에 대한 점수가 데이터베이스에 저장되고, 이후에 사용자에게 새로운 메뉴를 추천할 때 이 점수를 활용하게 되어있다. (repository: https://github.com/WinterLimited/h..
[메모] Spring 원리 (3) 빈 생명주기 콜백, 빈 스코프 - 빈 생명주기 콜백 - 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 초기화 콜백: 빈이 생성되고, 의존관계의 주입이 완료된 이후 호출 소멸전 콜백: 빈이 소멸되기 직전에 호출 - 초기화, 소멸 인터페이스 - InitializingBean - afterPropertiesSet() DisposableBean - destory() 인터페이스 방식의 단점 스프링 전용 인터페이스라 스프링에만 의존하여 사용가능 초기화, 소멸 메서드의 이름 변경 불가능 코드를 고칠 수 없는 외부 라이브러리에서는 사용 불가능 - 빈 초기화, 소멸 - 메서드 이름을 자유롭게 부여가능 스프링 빈이 스프링 코드에 의존하지 ..
[메모] Spring 원리 (2) 컴포넌트 스캔, 의존관계 자동주입 - 스프링 Annotation - 스프링에서는 컴포넌트 스캔을 통해 자동적으로 의존관계를 주입하도록 할 수 있다. @Controller: 스프링 MVC 컨트롤러로 인식한다. @Repository: 스프링 데이터 접근 계층으로 인식하고, 데이터 계층의 예외를 스프링 예외로 변환해준다. @Configuration: 앞서 보았듯이 스프링 설정 정보로 인식하고, 스프링 빈이 싱글톤을 유지하도록 추가 처리를 한다. @Service: 특별한 처리를 하지 X, 개발자들이 핵심 비즈니스 걔층을 인식하는데 도움을 준다. - ComponentScan FilterType - FilterType은 5가지 옵션이 있다. ANNOTATION: 기본값, annotation을 인식해서 동작 ASSIGNABLE_TYPE: 지정한 타입..
[메모] Spring 원리 (1) 싱글톤 - 싱글톤 패턴 - 순수한 DI 컨테이너인 AppConfig를 통해 요청을 하면, 매 트래픽마다 객체를 생성 -> 기존 방식은 메모리 낭비가 심해질 수 있다. 해결방안: 해당 객체가 딱 1개만 생성되고, 공유하도록 설계 -> 싱글톤 패턴 싱글톤 패턴 구성 package springprinciple.core.singleton; public class SingletonServiceTest { // 1. static 영역에 객체 instance를 미리 하나 생성 private static final SingletonServiceTest instance = new SingletonServiceTest(); // 2. 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회가능 publi..
[메모] Spring 입문(2) - 스프링 DB - @SpringBootTest DB연동 config를 Spring이 들고 있기 때문에 테스팅 진행에 있어 스프링 컨테이너와 테스트를 함께 실행할 수 있게 해줌 DB연동 이후 Testing 진행 시 @Transaction 적용하면 DB에 실제 데이터 반영 없이(다음 테스트에 영향 없이) 테스팅 진행 가능 (@AfterEach, BeforeEach 사용 불필요) JPA 스프링 Repository 관련 예제 코드 package winterlimited.hellospring.repository; import jakarta.persistence.EntityManager; import jakarta.persistence.TypedQuery; import winterlimited.hellosprin..
[메모] Spring 입문(1) Gradle은 의존관계가 있는 라이브러리를 함께 다운로드 한다. - 스프링 부트 라이브러리 - spring-boot-starter-web spring-boot-starter-tomcat: 톰캣(웹 서버) spring-webmvc: 스프링 웹MVC spring-boot-stater-thymeleaf: 타임리프 템플릿 엔징(View) spring-boot-stater(공통): 스프링 부트 + 스프링 코어 + 로깅 spring-boot spring-core spring-boot-stater-loggin logback + slf4j - 테스트 라이브러리 - spring-boot-starter-test junit: 테스트 프레임워크 mockito: 목 라이브러리 assertj: 테스트 코드 작성의 편리함 제공 s..