전체 글

나의 성취 기록들
개발일지/돌픽

이상형월드컵 프로젝트

시작하게 된 계기 이전에 진행했었던 프로젝트에서 다양한 부분에서 부족함을 많이 느꼈고, 백엔드의 모든 부분에 대해 직접 개발해보고자 하는 욕심도 있었다. 무엇보다 나만의 서비스를 운영해보고 싶다는 생각도 있었다. 그래서 백엔드 1인, 프런트엔드 1인으로 진행을 해보고자 한다. 이상형월드컵 선택 이유 ? 예전에 여자친구와 여러 가지 선택지 중에서 하나를 고르려다 어떤 걸 고를지 몰라 한참 고민했던 적이 있다. 그때 이상형월드컵 서비스에 접속해서 나만의 월드컵 만들기를 이용한 적이 있다. 그런데 그때 월드컵을 만들려면 각종 사진들을 미리 다운로드해서 준비해왔어야 했고, 이를 보자마자 귀찮아서 창을 닫았던 기억이 있다. 그래서 오로지 편리함에 초점을 맞추어 제작해 보고자 한다. 간략한 설계 현재 검색창에 이상..

개발일지/웹개발

HTTP 3xx - 리다이렉션 (Redirection)

3xx Redirection 이란? 요청을 완료하기 위해 유저 에이전트의 추가 조치가 필요하다 웹 브라우저는 3xx 응답의 결과에 Location 헤다가 있을 경우, Location 위치로 자동 이동한다 리다이렉션의 종류 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 이동 원래의 URL을 사용하지 않는 경우, 검색 엔진 등에서도 변경 인지 /members -> /users /event -> /new-event 일시 리다이렉션 - 일시적인 변경 리소스의 URI가 일시적으로 변경 검색 엔진 등에서 URL을 변경하면 안 된다 주문 완료 후 주문 내역 화면으로 이동 PRG : Post/Redirect/Get 특수 리다이렉션 결과 대신 캐시를 사용 영구 - 301 Moved Permanently 리다이렉트..

개발일지/Spring

[회고] 스프링 핵심 원리 - 기본편

스프링 부트를 이용하여 2가지 프로젝트를 진행해보고 나서 문득 스프링에 대한 기초가 궁금해서 수강한 강의이다. 비전공자이다 보니 기초가 아무래도 부족하지 않나 싶은 생각도 들었고, 사실 워낙 유명한 분의 강의이다 보니 궁금한 게 컸다. 대부분 부트캠프에서 배웠던 내용들이라 새롭게 배웠다기보다는 복습을 한 기분이다. 그때 당시에는 IoC, DI 등 이러한 용어적인 부분들이 배우면서도 와닿지 않았었다. 프로젝트를 진행하면서, 이런 저런 기능도 추가하고 구현하면서 어렴풋이 알게 되었던 것 같다. 좋았던 점은 과거의 스프링이 없던 시절부터 점점 현대로 발전해 오는 과정에서 왜 이러한 기능들이 생겨났는지와, 왜 이러한 기능들이 필요한지에 대한 이유들에 대한 설명이다. 그러한 과정을 코드로 보여준다. 예를 들어, ..

개발일지/Spring

Spring - 빈 생명주기 콜백

스프링 빈의 이벤트 라이프사이클 스프링컨테이너생성 -> 스프링빈생성 -> 의존관계주입 -> 초기화콜백 -> 사용 -> 소멸전콜백 -> 스프링종료 초기화 콜백 : 빈이 생성되고, 의존관계 주입이 완료된 후 호출 소멸전 콜백 : 빈이 소멸되기 직전에 호출 Spring은 크게 3가지 빈 생명주기(Bean LifeCycle) 콜백을 지원합니다 인터페이스(InitializingBean, DisposableBean) 설정 정보에 초기화 메서드, 종료 메서드 지정 @PostConstruct, @PreDestroy 애노테이션 지원 1. 인터페이스(InitializingBean, DisposableBean) 먼저 인터페이스를 사용하는 방법을 알아보겠습니다. package hello.core.lifecycle; impor..

개발일지/Spring

Spring 다양한 의존성 주입

Spring 관련해서 요즘 기초부터 다시 보고 있는데 생성자 주입에 관해서 보고 있던 중, 흥미로운 부분을 발견했다. 수정자 주입과 필드 주입이다. (옛날에는 수정자 주입, 필드 주입을 많이 사용했었다고 한다) 수정자 주입 선택, 변경의 가능성이 있는 의존관계에 사용한다 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다 set메서드를 public으로 열어둬야 한다 (누군가 변경가능성 있음) @Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; @Autowired public void..

개발일지/Spring

스프링 싱글톤 컨테이너 (Spring Singleton Container)

스프링 컨테이너 기존 싱글톤 패턴의 문제점을 모두 해결함과 동시에 객체 인스턴스를 싱글톤으로 관리한다 (싱글톤패턴의 문제점) 싱글톤 패턴을 적용하지 않아도, 객체 인스턴스를 싱글톤으로 관리함 스프링 컨테이너는 싱글톤 컨테이너 역할을 함(싱글톤 객체를 생성하고 관리하는 기능을 싱글톤 레지스트라 함) @Test @DisplayName("스프링 컨테이너와 싱글톤") void springContainer() { ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); MemberService memberService1 = ac.getBean("memberService", MemberService.class); MemberSe..

개발일지/Spring

싱글톤 패턴 (Singleton Pattern)

싱글톤 패턴이란? 하나의 인스턴스만 생성하여 사용하는 디자인 패턴 (클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴) 사용법 static 영역에 객체 instance를 하나 미리 생성한다 이 객체 인스턴스가 필요하면 오직 getInstance() 메서드를 통해서만 조회할 수 있도록 한다 (이 메서드는 항상 같은 인스턴스를 반환함) 오직 하나의 객체 인스턴스만 존재해야 하므로, 생성자를 private으로 막아서 혹시라도 외부에서 new 키워드로 객체 인스턴스가 생성되는 것을 막아준다 public class SingletonService { // static 영역에 객체를 "1개"만 생성해둔다 private static final SingletonService instance = new S..

개발일지/Spring

좋은 객체 지향 설계의 5가지 원칙 (SOLID)

SOLID 클린코드로 유명한 로버트 마틴이라는 사람이 정리한 좋은 객체 지향 설계의 5가지 원칙 SRP : 단일 책임 원칙 (Single responsibility principle) OCP : 개방-폐쇄 원칙 (Open/closed principle) LSP : 리스코프 치환 원칙 (Liskov substitution principle) ISP : 인터페이스 분리 원칙 (Interface segregation principle) DIP : 의존관계 역전 원칙 (Dependency inversion principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 함 하나의 책임이라는 것이 모호함 클 수 있고, 작을 수 있음 문맥과 상황에 따라 다름 중요한 기준은 변경이다 변경이 있을 때 파급..

개발일지/Spring

Spring-boot Querydsl 사용해보기!

JPA를 이용해 간편하게 메서드 네이밍을 사용하던 중 문제가 발생했다 A and (B or C)를 찾는 메서드를 만들어야 하는데 어렵다... 사실 그냥 쿼리를 만들면 쉽긴 하다만JPA메서드네이밍만으로 할 수 있을 것 같아서 도전해 봤다 Page findAllByProductCategories_Category_CategoryIdAndNameContainsOrProductCategories_Category_CategoryIdAndBrandContains(long categoryId1, String name, long categoryId2, String brand, Pageable pageable); ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 만들고 보니 어이가 없다 ㅋㅋㅋ 그래도 약간의 ..

E-room
E-room Achievement Logs