스프링 12

영한님 책에서 볼 수 없는 JPA (Hibernate) 내부 코드 살펴보기

몇 달 전 JPA를 공부를 하는데 책에서 말하는 엔티티매니저, 쓰기지연저장소 등등 이런 용어들은 코드로 어떻게 되어있을까 궁금해져 JPA 관련 검색을 해보니 대부분 글들이 영한님의 PDF 강의 자료로 이루어져 있었습니다. 하지만 저는 강의나 책에 있는 기본적인 개념, 예제 말고 실제로 어떻게 코드로 구현되어 있고, 어떤 자료구조를 사용했을까 등등.. 궁금했습니다. 그래서 제가 궁금해서 왜? 라는 궁금증에 대한 해답을 스스로 찾아보고 정보를 공유하면 좋겠다고 생각이 들어 위해 삽을 들고 삽질을 시작했습니다. *현재 저는 실무자도 아니고 취준생이기 때문에 분석 실력은 살짝 감안하셔서 봐주시면 감사하겠습니다. 뭔가 이상하거나 틀린 부분이 있다면 댓글 남겨주시면 확인 후 반영하도록 하겠습니다! JPA 그리고 H..

스프링 2023.03.14

[HTTP] 로그아웃은 "GET" or "POST" ??

프로젝트를 진행하다가 사용자의 로그아웃을 구현할 일이 있었습니다. 당연히 로그아웃은 Rest 관점에서 사용자의 상태를 변경시키니까 Post가 아닌가? 라고 생각을 할 수 있지만 Rest 관점 외에서 이유를 생각해보고 찾아보니 아래와 같은 브라우저의 기능이 있습니다. 사용자를 위해 GET 링크를 미리 가져오는 웹 가속기(Web Acceleration)와 같은 일부 프로세스가 있습니다. - 웹 가속화 는 캐싱 및 압축과 같은 다양한 기술을 사용하여 웹 서버와 클라이언트 브라우저 간의 콘텐츠 전송 속도를 높이는 것을 말합니다. 이러한 프리페치의 목적은 사용자가 링크를 따라가면 즉시 콘텐츠를 제공하여 페이지 로딩 시간을 단축하는 것입니다. 따라서 프로세스는 GET 요청의 링크가 콘텐츠를 반환하기 위한 것이며 상..

스프링 2022.07.12

assertJ - 공식문서 기반 간단 정리

AssertJ란?? AssertJ는 풍부한 assertions 세트와 유용한 오류 메시지를 제공하고 테스트 코드 가독성을 향상시키며, IDE내에서 매우 쉽게 사용할 수 있도록 설계된 Java 라이브러리 입니다. Junit5 에서 해당 라이브러리를 많이 사용합니다. 실제 Junit5 공식문서에 가면 이런 글이 있습니다. JUnit Jupiter에서 제공하는 어설션 기능은 많은 테스트 시나리오에 충분하지만 더 많은 성능과 매처 와 같은 추가 기능 이 필요하거나 필요한 경우가 있습니다. 이러한 경우 JUnit 팀은 AssertJ , Hamcrest , Truth 등과 같은 타사 주장 라이브러리의 사용을 권장합니다. 지원되는 자바 버전 AssertJ Core 3.x 에는 Java 8 이상이 필요 AssertJ ..

스프링 2022.07.08

Builder Pattern (빌더 패턴)

빌더 패턴의 정의 빌더 패턴은 "복잡한 객체의 구성을 해당 표현과 분리하여 동일한 구성 프로세스에서 여러 개의 다른 표현을 생성할 수 있도록 하는 것"을 목표로 합니다. 빌더 패턴은 fluent interface와 비슷해야 합니다. fluent interface는 일반적으로 람다식에서 볼 수 있듯이 method cascading(또는 method chaining)을 사용하여 구현됩니다. *메서드 체인은 객체 지향 프로그래밍 언어에서 여러 메서드를 호출하기 위한 일반적인 구문입니다. method chainig example) public class PersonMethodChaining { private String name; private int age; //해당 속성을 설정하는 부작용 외에도 setter..

스프링 2022.06.28

XSS 와 CSRF

XSS(Cross Site Scripting) Web Application에서 나타나는 취약점중 하나로 웹사이트 관리자가 아닌 이가 사이트에 악성 script를 삽입할 수 있는 취약점이다. 사용자의 쿠키, 세션 탈취, 비정상기능 수행등을 한다. html이 를 자바스크립트라고 인식해서 실행한다. 악성코드를 퍼트릴 때 많이 사용한다. 다음과 같은 경우에 발생 데이터는 신뢰할 수 없는 소스를 통해 웹 응용 프로그램에 입력되며 가장 자주 웹 요청이 발생합니다. 데이터는 악성 콘텐츠의 유효성을 검사하지 않고 웹 사용자에게 전송되는 동적 콘텐츠에 포함됩니다 1. Reflected XSS - non persistent 요청과 동시에 결과가 사용자에게 반사되는 형태 클라이언트 요청에서 전송된 악성 스크립트는 서버에 전..

스프링 2022.06.05

서블릿(Servlet)

서블릿(Servlet) 이란? 서블릿이란 동적인 페이지를 만들기 위해 사용되는 웹 애플리케이션 프로그램 낮은 성능 및 낮은 수준의 확장성과 같은 CGI 의 한계를 해결 CGI (Common Gateway Interface)는 뭔가요? CGI 는 실제로 C 또는 C++ 와 같은 프로그래밍 언어를 사용하여 작성된 외부 응용 프로그램이며 클라이언트 요청을 처리하고 동적 콘텐츠를 생성하는 역할 CGI 는 이처럼 서버에서 모든 요청에 대한 프로세스를 만들기 때문에 많은 요청이 있을 경우 메모리에 적재하여 CPU할당을 받아 실행되는 프로세스는 서버에 부하가 많이 일어난다. 그래서 이를 해결하고자 모든 새 요청에 대해 프로세스를 생성하지 않고, 모든 요청을 동시에 처리하는 단일 인스턴스만 존재하는 서블릿을 사용합니다..

스프링 2022.05.31

싱글톤 패턴(Singleton)

정의 객체의 인스턴스가 오로지 한개만 생성되도록 설계하는 것 클래스의 인스턴스화를 하나의 객체로 제한 왜 쓰는지?? Singleton은 고유한 리소스를 캡슐화하여 애플리케이션 전체에서 쉽게 사용할 수 있도록 함 캘린더, 로깅 등에 사용 됨 why? => 오로지 한개만 필요하기 때문에 기타 장점 인터페이스를 구현 가능 지연 로드 가능 단점 전역 상태는 코드의 결합을 증가시키기 때문에 리팩토링하기가 어려워 진다. 클래스가 싱글톤의 구체적인 구현에 의존하게 된다. → IoC/ DI 컨테이너를 사용하여 객체를 요청하는 하는 것으로 바꿔야 한다. 단위 테스트가 어려워짐 → 생성자를 통해 동적으로 객체를 주입할 수 없어 이런 경우는 필요한 객체를 직접 만들어서 사용해야 하기 때문에 테스트용 객체로 대체하기가 힘듬 ..

스프링 2022.05.26

REST ? RESTful ? REST API?

자바 스프링을 공부하기에 카테고리는 마땅히 추가할 곳이 없어 스프링에 분류했습니다. F-lab 2주차 RESTful 에 대하여 한번 공부해보라는 과제가 주어져 한번 찾아보게 되었다. 자바 스프링 공부를 하면 자연스럽게 HTTP 도 공부를 하게 되는데 그 과정에서 REST라는 단어를 많은 사람들이 쓰는것을 보았고 RESTful 하다. RESTful 하지않다. REST API 를 만드려면 어떻게 해야하나요? 라는 글 같은 것을 많이 봤지만 아직 나랑은 먼 단계 라고 생각하여 자세하게 알아 볼 생각은 없었다.. 반성하자 과제도 과제이지만 이미 많은 사람들이 언급하는 것으로 보아 중요할 것 같은데 왜 이런 말들이 많을까 한번 알아보고 정리해봤다. 왜? 라는 이유에 집중을 해봤다. REST REST(REprese..

스프링 2022.05.26

관심사의 분리(Seperation Of Concern)

객체지향의 세계에서는 모든 것이 변한다. 변수나 객체의 필드값이 변하는게 아닌 객체에 대한 설계와 이를 구현한 코드가 변한다는 뜻 입니다. 사용자의 변화하는 요구사항은 소프트웨어 엔지니어링에서 피할 수 없습니다. 그래서 개발자는 객체를 설계할 때 이 '변화하는 미래를 어떻게 대비할 것인가' 를 고려해야 합니다. 가장 좋은 방법은 변화가 이루어질 때 이 변화의 폭을 최소한으로 줄여주는 것이다. 이 변화의 폭을 최소한으로 줄이기 위해 관심사의 분리가 필요합니다. 사용자는 자동차를 운전한다 라는 프로그램을 만드려고 합니다. 그런데 사용자가 아반떼를 운전하고싶다는 요구사항이 있습니다. 그럼 어떻게 코드를 구현할 수 있을까요? class Avante { public void accel(){ System.out.p..

스프링 2022.05.18

스프링(Spring)은 왜 사용할까?

스프링이라는 기술을 배우고, 사용하는데 왜 사용하는지도 모르고 쓰는거 같아서 이렇게 정리를 하게되었습니다. 스프링이란? 우선 스프링은 왜 만들어 졌을까요? 스프링이라는 기술의 핵심 컨셉은 무엇인지 생각해보신 적이 있으신가요 스프링은 자바언어 기반의 프레임워크입니다. 자바언어 기반이니 자바의 가장 큰 특징은 무엇일까요. 바로 객체지향언어 입니다. 스프링은 객체지향언어가 가진 특성(추상화, 상속, 캡슐화, 다형성)을 살려내는 프레임워크 라고 할 수 있습니다. 즉. 스프링은 좋은 객체지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크입니다. 그러면 왜 사용하는지도 답이 자연스럽게 나오게 됩니다. 스프링이 지원하는 기술 DI(Dependency Injection), DI 컨테이너 제공을 통하여 다형성과 OC..

스프링 2022.03.25