programming/SPRING
싱글톤 사용시 주의사항
싱글톤 패턴 싱글톤 패턴은 클래스의 인스턴스가 딱 1개만 생성되는 '디자인 패턴'이다. 인스턴스가 딱 1개만 있어야 하기 때문에 'private'를 사용해서 외부에서 new사용을 막아야 함. 이미 만들어진 녀석(객체)을 활용하기 때문에 요청 시마다 인스턴스를 새로 만드는 것에 비해 효율적이다. 하지만, 다음과 같은 단점들도 있다. 구현 코드가 길다 클라이언트가 구체 클래스에 의존한다 = DIP를 위반한다 = OCP원칙 위반 가능성이 높다. private 생성자로 하위 클래스 생성이 어렵다 테스트가 어렵다 내부 속성의 변경 및 초기화가 어렵다 안티패턴으로 불리기도 한다. 결론적으로 유연성에 있어서 불리하다. 싱글톤 컨테이너 위의 싱글톤 패턴의 단점을 보완하기 위해 '싱글톤 컨테이너'라는 것을 사용함. 싱글..

Spring MVC
Spring MVC - Spring의 모듈중 웹 계층을 담당하는 모듈 중 하나. (웹 프레임워크의 한 종류) - 서블릿(Servlet)API를 기반으로 클라이언트의 요청을 처리하는 모듈 서블릿(Servlet) 클라의 요청을 처리하도록 특정 규약에 맞춰 Java파일로 작성하는 클래스 파일 (아파치 톰캣 -> 이런 서블릿들이 웹 application으로 실행하게 해주는 서블릿 컨테이너) >> 클라이언트의 요청을 편리하게 처리해줌 MODEL 클라가 요청한 작업을 처리하고 응답으로 돌려준다. 이때 응답으로 돌려주는 작업의 처리결과 : Model 클라의 요청을 구체적으로 처리하는 영역을 서비스 계층 (Service Layer) 실제 요청을 처리하기 위해 Java코드로 구현한 것을 비즈니스 로직(Business L..
![[Spring Security] - 필터에 대한 개념](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMKyZL%2FbtrGg00CHuO%2F0nxZVNgQ1TCES2lro7amm1%2Fimg.jpg)
[Spring Security] - 필터에 대한 개념
Spring Security? Spring Security는 간단한 형태의 Servlet Filter를 통해서 자바 웹 애플리케이션에 대한 인증과 권한 (Authentication & Authorization)을 제공하는 Spring의 보안 Framework이다. Spring Security의 큰 특징으로는 각각의 역할에 맞는 필터를 체인으로 구축하여 순서에 따라 실행된다는 점이다. 그리고 모든 Request는 반드시 이 필터 체인을 거쳐야 한다. 그리고 이 필터를 개발자가 선택하여 필요에 맞게 커스터마이징 할 수 있다. 아래의 SecurityConfig 클래스 내부의 SecurityFilterChain 메서드 안에서 ( . )으로 이어지는 부분이 필터의 체인을 구현하고 있는 모습이다. import or..

Spring Data JDBC 간략 요약
Spring Data JDBC란? Spring Data JDBC는 객체 중심 기술(Object-Relational Mapping / ORM)중 하나로 같은 ORM 기술로는 JPA(Java Persistence API)가 있다. SQL중심 기술: [mybatis], [Spring JDBC] ORM중심 기술: [JPA], [Spring Data JPA], [Spring Data JDBC] ORM은 DB에 접근하기 위해 JDBC API처럼 SQL 쿼리문을 직접 작성하는 방식보다는 DB의 테이블에 데이터를 저장하거나 조회할 때, 자바의 객체(Object)를 이용해 Application 내부에서 이 객체를 SQL 쿼리문으로 자동 변환하고 DB 테이블에 접근한다. 실제로는 Spring Data JDBC는 상대적으로..

JDBC 간단 요약
JDBC란? JDBC (Java Database Connectivity)는 자바 기반 Application코드 레벨에서 사용되는 데이터를 DB에 저장 / 업데이트하거나, DB의 데이터를 자바 코드레 벨에서 사용하게 해주는 Java에서 제공하는 표준 API이다. JDBC의 구체적인 API 사용법은 알 필요가 딱히 없지만 동작 흐름을 알고 있으면 Spring에서 지원하는 데이터 액세스 기술을 사용하는 데 있어 유용하다. 후에 학습하게 될 Spring Data JDBC나 Spring Data JPA 기술들은 내부적으로 JDBC를 이용한다. JDBC 전체 동작 흐름 JDBC API 사용을 위해서는 JDBC 드라이버라는 것을 먼저 로딩한 후에 DB와 연결하게 된다. DB와의 통신을 담당하는 인터페이스이다. Ora..

예외 처리
왜 쓰는가 유효성 검증에 실패했을 때 단순히 404 같은 에러를 띄우게 된다면 어느 부분에서 왜 틀린 건지 제대로 알 수가 없다. 따라서 클라이언트 측에서 좀 더 구체적으로 에러 메시지의 확인을 할 수 있도록 예외처리를 통해 메시지를 전달한다. 문제가 발생하면 예외를 던진다 예외를 잡아서 가공하고 클라이언트에 깔끔한 메시지로 돌려준다 @ExceptionHandler Controller 단계에서 @ExceptionHandler를 이용해 예외처리를 할 수 있다. Controller내부의 핸들러 메서드에서 예외가 발생했을 때 해당 예외를 @ExceptionHandler 예외 처리 메서드에서 호출하게 된다. @PostMapping public ResponseEntity postMember(@Valid @Requ..

Entity개념 복습
*해당 포스팅은 개인적인 공부를 정리한 것이므로 틀린 정보가 있을 수 있습니다* *틀린 부분에 대한 피드백은 감사하게 받겠습니다* 스터디 책을 진행하다가 Entity라는 것이 자꾸 튀어나왔는데, 분명 초반 부분에서 한번 스쳐 지나갔다. 하지만 개념이 이해가 되지 않은 상태에서 일단 코드를 따라 쳐 보다 보니 이미 나온 내용이지만 어떤 기능을 하는지 잘 와닿지 않았고 계속 찝찝한 기분이 들었다. 따라서 스터디 발표도 할 겸 한번 간단하게나마 정리해보려 한다. 추가할 것: JPA Repository에서 진행되가는 과정 - @entity로 객체 만들고 persist() 메서드로 실제로 DB와 연동을 시킨다. 빈 과 엔티티 차이?? entity의 위치 큰 그림으로 봤을때 알아두면 좋을 사전 정보는 아래와 같다 ..

구글 로그인 구현 이후 사용자 이름이 뜨지 않는 문제
'스프링 부트와 AWS로 혼자 구현하는 웹 서비스' 책 진도를 나가던 도중 구글 로그인에서 막히는 문제가 생겼다. 사실 기능적인 작동은 잘 되었다. 구글 로그인을 통해 로그인을 했지만, 로그인한 사용자의 이름이 뜨지 않고 로그인하지 않은 것 같은 화면이 계속 나왔다. 기능적인 부분: DB에 사용자 정보 저장 / 권한 변경하고 글 작성하는 것들은 잘 되었다. 요약하자면, 변수명이 일치하지 않아서 나는 문제였다. (index.mustache / IndexController.java)

핸들러 메서드의 응답 데이터 순서 변경
핸들러 메서드를 ResponseEntity와 HashMap을 이용하여 응답 데이터의 반환값을 확인해보는 연습을 해보았다. 처음 코드는 위와 같이 작성되어 있었고 postman을 통해 리턴된 JSON내용을 확인해 봤는데 내가 생각했던 결과와 조금 달랐다. map안에 데이터는 잘 매칭이 되었지만 내가 의도했던 방식은 engName / korName / price의 순서였는데 순서가 맞지 않게 나오는 문제였다. 검색을 해봤는데 HashMap을 그냥 쓰지 말고 LinkedHashMap으로 변경을 하라는 글이 있었다. 그 후 자료구조에서 배운 map의 특징이 생각났다. put 한 순서대로 데이터를 넣고 싶을때는 LinkedList처럼 Linked를 붙여야 하고, 그렇지 않고 그냥 map을 사용하면 순서에 관련이 ..

gradle reload는 중요해
스터디 책 진도를 나가던 도중 import를 할 수 없는 문제를 만나게 되었다. (구글 연동 구현 p.180) "org.springframework.security cannot be resolved" 프레임워크에서 security를 불러오지 못한다는데 아무리 검색을 해봐도 나만 문제를 겪고 있는 상황이었다. gradle.build에 의존성도 추가했고 오타도 없는데 왜 이럴까 하면서 찾다가 아래의 블로그에서 답을 찾았다. 이클립스 : The import org.springframework cannot be resolved 깃헙의 이클립스 스프링 프로젝트 가져왔을 때 생긴 문제다. 이클립스 우측 상단의 open perspective를 통해 Git perspective를 가져온다. clone git repos..
[TBC]AOP(Aspect Oriented Programming)
Aspect Oriented Programming(AOP - 관심 지향 프로그래밍 Application의 핵심 업무 로직에서 보안, 트랜잭션 같은 공통 기능 로직들을 분리하는 것 Application을 보는 관점을 '하나하나의 기능'에서 '공통 관심사' 관점으로 보는 것 OOP만 단독적으로 설계를 하게 된다면, 여러 군데에서 공통적으로 쓰이는 부가 기능의 중복 코드가 발생한다. 만약 부가 기능에 변경점이 생긴다면 사용된 모든 곳에 대한 수정 작업을 해야 하는데 이런 경우 유지보수가 힘들어지는 단점이 있다. AOP는 이를 보완하기 위한 개념으로, OOP의 불필요한 반복을 해결하기 위한 방법이다. 지속적으로 공부하면서 업데이트 예정 [TBC] AOP 관련 포스팅 Advice Pointcut 표현식 / 지시자..
AOP - Annotation (AspectJ)
Spring에서의 AOP는 Spring에서의 IoC를 보완하는 것에 큰 목적을 갖는다. Spring AOP는 스키마 기반 접근 방법과 @AspectJ 애너테이션 스타일을 지원한다. @AspectJ @AspectJ는 Annotation이 있는 일반 Java클래스로, 관점을 선언하는 스타일을 의미함 Spring AOP vs AspectJ Spring AOP Spring IoC에서 기본적으로 제공하는 AOP기능으로, Spring Container가 관리하는 Bean에만 사용이 가능하다. VS AspectJ 자바에서 동작하는 모든 객체에 대해 AOP를 적용이 목적이다. 좋은 성능 + 강력한 기능 BUT 복잡하다 외에 더 다른 차이점 들이 있지만 지금 단계에서는 많이 복잡하다고 판단되어 스킵 Comparing S..