메이븐은 자바용 프로젝트 관리 도구이다.프로젝트를 진행하며 사용할 많은 라이브러리들을 관리해주는 도구특징 : 연관된 라이브러리들까지 거미줄처럼 다 연동이 되어서 관리가 된다.네트워크를 통해 연관된 라이브러리들까지 업데이트를 해주기 때문에 편리하다.Groovy를 이용한
Dependency Injection(DI) : 객체 자체가 아니라 외부에 의해 객체의 의존성이 주입되는 설계 패턴DI에는 필드 주입, setter 주입, 생성자 주입 3가지 방법이 있는데, 의존관계가 실행 중에 동적으로 변하는 경우는 거의 없으므로 생성자 주입만 정리
Spring에서는 빌드할 때 Spring Container에 객체들을 올려서 관리하므로 Container에 올리는 방법을 알아두자.Spring Container에 객체를 등록하는 방법은 @Component 어노테이션을 이용하면 된다.@Component 어노테이션이 있는
스프링의 탄생 배경은 결국 '객체지향의 장점을 살리자'였다.객체지향에는 5가지 핵심 내용이 있고, 이것들의 앞글자를 따 SOLID라고 한다.작성된 클래스는 하나의 기능만 가지며 클래스가 제공하는 모든 서비스는 그 하나의 책임을 수행하는 데 집중되어 있어야 한다.소프트웨
SOLID를 철저하게 지켰음에도 불구하고 OCP, DIP를 위반하는 일들이 종종 존재한다.예를 들어다음과 같이 역할과 구현을 구분했음에도 불구하고 기능을 확장, 수정하려면 다음과 같이 수행 코드를 변경해야 하는 일이 발생한다.이 이유는 OrderServiceImpl가
스프링에 등록되어 있는 Bean을 조회하는 방법은 AnnotationConfigApplicationContext를 이용하면 된다.ac.getBean()으로 꺼낼 수 있음.그러나 같은 타입이 두 개 이상 있을 시 NoUniqueBeanDefinitionException
Singleton : GoF(Gang of Four) 디자인 패턴의 생성 패턴 5가지 중 하나하나의 객체를 생성하면 생성된 객체를 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조할 수는 없다.클래스 내에서 인스턴스가 하나뿐임을 보장하며, 불필요한 메모리 낭비를
코드를 순차적으로 하나씩 실행하는 것한 번에 한 줄의 코드만 수행동시 처리가 필요하다면 쓰레드를 추가로 생성해야 함쓰레드를 생성하는 cost가 매우 비쌈 (요청마다 쓰레드를 생성하면 응답 속도가 늦어짐)컨텍스트 스위칭 비용 발생CPU, 메모리 임계점을 넘은 쓰레드 생성
MVC프레임워크를 만들다 궁금한 점이 생겨서 포스트 해보려고 한다.FrontController를 통해 한 개의 서블릿으로 클라이언트의 요청을 받는 과정을 구현하는 강의였다.요청된 파라미터들을 paramMap에 저장model 객체 생성process 메서드에 paramMa
스프링의 MVC 패턴은 기본적으로 FrontController 패턴을 사용하고 있다.기존의 MVC 패턴을 사용하면 각 요청마다 공통으로 처리해야 하는 부분도 일일이 다 처리해줘야 한다.ex)그래서 공통으로 처리하는 부분을 하나로 만들 수 있는 방법이 있는데, 이것이
서버의 로그를 System.out.println()으로 남기게 되면 많은 오류가 발생한다.1\. 사용자가 급격하게 늘 경우 해당 로그를 다 콘솔에 찍어야 하므로 많은 부담이 된다.2\. 해당 출력이 어디서 출력되었는지 찾기가 힘들다.그래서 실무에서는 System.out
Spring MVC 패턴을 직접 구현해보는 내용이 있어 듣고 정리해보았다.강의에선 V1 ~ V5까지 다 구현을 하였는데, 내용이 너무 많아 V5의 내용만 포스팅할 예정이다.V5의 핵심은 어느 종류의 컨트롤러도 유연하게 다룰 수 있다는 점이다. (끝판왕)실제 Spring
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 By 김영한 강사님의 강의 내용입니다.ModelAttribute가 어떤 기능들을 해주는지 알아보자.@RequestParam 어노테이션을 이용해 요청이 들어오는 파라미터들을 다음과 같이 처리할 수 있다.하나하나 다 @Re
스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 By 김영한 강사님의 강의 내용입니다.주문을 생성하는 URL에서 새로고침을 하면, 전에 보냈던 요청을 그대로 다시 보내 주문이 중복되는 현상이 발생한다.이 문제를 해결하기 위해 POST, Redirect GET 을 사용
쿠키를 통해 로그인 상태를 유지하면 심각한 보안 문제가 발생하기 때문에 session을 이용해서 로그인 처리를 할 수 있다.서버가 클라이언트에 seesionID만 쿠키에 담아 전달하고, 서버에서는 sessionID에 해당하는 정보들을 저장한다.쿠키 값 변조 -> 예측
Servelet Filter와 같이 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다.EX)모든 요청 URL을 Log로 남겨야한다.요청이 들어오기 전 수행할 수 있는 행동들을 일일히 컨트롤러에서 메서드를 호출하는 것이 아니라 모듈로 분리해 편리하게 사용할 수 있다.
웹 애플리케이션사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다.애플리케이션에서 예외를 잡지 못하고, 서블릿 밖으로 까지 예외가 전달되면 WAS까지 예외가 전달된다.WAS <- 필터 <- 서블릿 <- 인터셉터 <- 컨트롤러
인프런 '스프링 MVC 2편' - 김영한님의 강의 내용입니다. 이번 포스트는 HTTP multipart를 간편하게 처리하기 위해 스프링에서는 MultipartFile 인터페이스를 제공한다. 서블릿을 통한 multipart를 처리하는 코드 HttpServletReq
인프런 '스프링 DB 1편' - 김영한님의 강의 내용입니다.JDBC(Java Database Connectivity) : 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API다.각 데이터베이스마다 애플리케이션 서버와 연결하고, SQL을 주고받는 방식이 다르기 때문
인프런 '스프링 DB 1편' - 김영한님의 강의 내용입니다.이전에 JDBC 만을 이용해 CRUD를 할 경우 SQL을 날릴 때 마다 DB Driver가 DB와 TCP/IP 커넥션으로 연결했다.이 과정에서 3 way handshake 같은 네트워크 동작이 발생하는데, 이는
트랜잭션의 개념에 대한 설명은 다른 포스트에서 했으므로 생략하겠다.JDBC를 통해 AutoCommit을 끈 뒤 트랜잭션을 처리하는 부분을 정리하고자 한다.비즈니스 로직에 따라 커밋하거나 롤백해야 하므로 트랜잭션을 사용하는 동안 같은 커넥션을 유지해야한다.가장 간단한 방
앞 선 포스트에서 트랜잭션을 사용하기 위해서는 동일한 Connection을 사용해야 한다고 했다.그러나 동일한 Connection을 코드로 작성하기에 처리하는 코드도 길고 지저분하다.그래서 스프링은 트랜잭션 동기화 매니저를 제공한다.트랜잭션을 시작할 때 비즈니스 로직에
스프링 부트 - 핵심 원리와 활용 김영한님 강의 내용JAR ( Java Archive )JAVA는 여러 클래스와 리소스를 묶어서 JAR라는 압축 파일을 만들 수 있다.JVM 위에서 직접 실행되거나 또는 다른 곳에서 사용하는 라이브러리로 제공된다.직접 실행하는 경우 m
기본 지식Client Request는 한 번에 한 개씩 들어오는 것이 아닌, 동시다발적으로 들어 온다. Java/Spring에서는 Thread를 이용해 Request를 처리한다. ( 정확하게 말하자면 Tomcat이 미리 만들어 놓은 Thread를 사용하여 )다음과 같은