개발/Spring 8

[Spring boot 프로젝트 정리 2] 관리자페이지 도서 카테고리 관리

정리 1 : 자기 참조 - 도서 카테고리 구현 [Spring boot 프로젝트 정리 1] 자기참조 - 도서 카테고리 구현 NHN Acadmey에서 인증과정 중 제가 구현한 파트에 대해 정리하고자 글을 씁니다. 인터넷 도서 사이트를 제작하는 프로젝트였고 그 중 카테고리, 주문 조회, 결제, 캐싱처리를 담당하였습니다. 예스 tk-story-1201.tistory.com 위의 링크의 후속으로 도서 카테고리를 관리하는 페이지를 구현한 내용을 정리해보고자 합니다. 해당 UI는 프로젝트 구현의 시간이 촉박하여 유행하고 있는 vue.js 나 리액트를 쓰지 못했고 커리큘럼상 가장 많이 썼던 Thymeleaf를 의존성을 추가하여 사용하였습니다. (그러므로 Spring boot 기반의 Front Server에서 UI 및 ..

개발/Spring 2023.04.04

[Spring boot 프로젝트 정리 1] 자기참조 - 도서 카테고리 구현

NHN Acadmey에서 인증과정 중 제가 구현한 파트에 대해 정리하고자 글을 씁니다. 인터넷 도서 사이트를 제작하는 프로젝트였고 그 중 카테고리, 주문 조회, 결제, 캐싱처리를 담당하였습니다. 예스알라딘 사이트 첫번째로는 카테고리입니다. 카테고리는 2단으로 구현을 했습니다. 부모 카테고리 - 자식 카테고리로 구현 하였고 자기 참조 방식을 사용하였습니다. 해당 카테고리를 등록, 수정, 삭제, 순서 변경까지 가능하도록 구현하였습니다. 아래는 카테고리의 엔티티 맵핑 관련한 코드입니다. JPA에서 entity를 생성할때, 기본 생성자(NoArgs)를 protected 까지 허용해주기 때문에 롬복 어노테이션을 사용하여 선언하였습니다. 카테고리는 static한 id를 사용하기로 정책으로 정했습니다. 고로 부모 카..

개발/Spring 2023.03.14

[Spring Cache] Spring boot 환경에서 Redis Cache 사용하기

서버를 운영시, 크게 변하지 않는 데이터를 계속 client에서 read 하고자할때, 사용하면 좋은 기능이다. 현재 진행중인 프로젝트인 인터넷 서점 구현에서 메인화면에 보이는 상품의 카테고리가 계속 조회가 되는 것 때문에 성능에 영향을 주는 듯하여 spring의 cache 기능을 사용하고자 하였다. Spring cache는 AOP 기반으로 관심사 분리를 하여 비즈니스 로직에 영향이 없도록 구현이 되어있고, Redis로 사용시, redis에 관련한 의존성만 추가한다면 편하게 사용할 수 있다. (현 프로젝트에서는 기존에 ObjectMapper와 Redis에 대한 설정이 되어있어서 더 편하게 사용하였다.) 우선 spring boot 2.7.7 환경에서 config 설정은 아래와 같다. CachConfig.ja..

개발/Spring 2023.02.15

[Spring] Spring MVC 정리

servlet 에서 모든 클래스가 servlet일 필요가 없어서 Front Controller 패턴을 사용하여 프로그램으로 들어오는 요청 및 응답을 하나의 servlet이 처리를 하였다. Spring MVC 에서의 Front Controller : DispatcherServlet ApplicationContext 와 WebApplicationContext의 차이 WebApplicationContext : ApplicationContext + ServletContext 설정 방법 WebConfig.java 를 생성 Controller만 따로 web요청을 처리하기 위해 따로 @ComponenetScan 해야함 (spring boot에서는 x) @Configuration, @EnableWebMvc 을 선언 W..

개발/Spring 2022.12.23

[Spring] 스프링 코어 정리 2 - 어노테이션

스프링 DI 방법 중 XML Annotation JAVA @Required 반드시 의존성이 주입되어야함을 강제 하는 어노테이션 @Autowired 주입 방법 required 속성 : 해당하는 객체가 스프링 컨테이너에 없으면 에러 타입이 같은 스프링 빈이 2개인 경우 : primary 속성 사용 가능 @Qualifier 스프링 빈의 이름을 지정해서 의존성 주입 @Value 외부속성을 주입하기 위해 사용 : 프로퍼티스 파일 내용 사용 환경별로 문자열이 달라질 수 도 있는 경우가 있으니 자주 사용 Annotation의 장점 XML 보다 간결한 코드로 설정 가능 Java 코드와 동일하게 구성 가능 단점 스프링 프레임워크에 의존성이 생겨버린다 Spring JavaConfig 클래스 사용 @Configuration..

개발/Spring 2022.10.31

[Spring] 스프링 코어 정리 1

스프링 프레임 워크란? - 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 - 프레임워크에 종속적이지 않음 (non-intrusive) - 원하는 기능만 끼워넣어서 사용가능 (modular) - 비기능적 요구사항 개발시, 필요한 인프라 제공 - POJO를 통한 개발 - 특징 - 경량 컨테이너로 Spring Bean을 직접 관리 - Spring Bean : 스프링 프레임워크가 원하는 대로 짠 자바 객체 - Spring 객체 라이프 사이클 관리 - Container : Spring bean 객체의 생성,보관,제거에 관한 모든 일을 처리 - POJO 기반 프레임워크 - 특정 인터페이스 구현 및 상속을 받을 필요 없음 - 제어 역전(IoC : Inversion of Control)..

개발/Spring 2022.10.12

[Spring] 스프링 컨테이너의 빈 조회 방법

스프링 컨테이너에 등록된 빈들을 조회하게 될 경우 사용하는 방법을 기록하고자 한다. 1. 모든 빈 조회 AnnotationConfigApplicationContext의 인스턴스인 ac로 부터 모든 스프링의 정보를 받기 위해서는 ac.getBeanDefinitionNames()를 실행하면 빈 이름을 모두 받아와서 ac.getBean(빈 이름) 을 통하면 빈을 조회 할 수 있다. public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); @Test @DisplayName("모든 빈 출력하기") void findAllBea..

개발/Spring 2022.08.25

[Spring] 스프링을 사용하는 이유?

Spring이란 JAVA를 좀 더 편하게 사용할 수 있게 해주는 프레임워크로 대규모의 회사에서 많이 사용한다. 여기서 "JAVA를 좀 더 편하게" 라는 단어의 의미를 김영한님의 "스프링 핵심 원리 - 기본편" 을 들으며 이해할 수 있게 되었다. 내가 프로그래밍을 하다 보면 하나의 class 혹은 객체에 정~말 다양한 책임과 기능을 모두 넣어 사용했었다. (혼자 기획하고 개발하다보니..) 그 이후에 객체 지향 설계 원칙에 대해 알게 되었고 그 설계 원칙을 단 하나도 지키지 않고 프로그래밍을 했다는 것 또한 알게 되었다. 내가 느낀바로는 Spring은 객체 지향적인 설계를 할 수 있도록 도와주는 아주 좋은 툴이라는 생각이 들었다. Spring에서 주요하게 사용 되는 단어로 IoC , DI 라는 단어가 나온다..

개발/Spring 2022.08.25