분류 전체보기 135 [Spring] JPA (1) 등장배경 자바로 애플리케이션을 개발하고 관계형 데이터베이스를 데이터저장소로 사용하면서 SQL을 주로 사용하게 됩니다. 초기에 JDBC API를 직접 사용해서 개발하기도 했는데, 애플리케이션의 비즈니스 로직보다 SQL과 JDBC API 작성에 더 많은 시간을 소비하는 경우가 많았습니다. 마이바티스나 JdbcTemplate 같은 SQL Mapper를 사용하면서 JDBC API 관련 코드를 많이 줄일 수 있었습니다. 하지만 여전히 CRUD용 SQL은 반복해서 작성해야 했고, 이런 과정은 너무 지루하고 비생산적이었습니다. 객체 모델링을 세밀하게 진행할수록 객체를 데이터베이스에 저장하거나 조회하기는 점점 더 어려워졌고, 객체와 관계형 데이터베이스의 차이를 메우기 위해 더 많은 SQL을 작성해야하는 경우가 생겼습니.. Domain/Spring 2021. 9. 27. [Docker] VM과 Container Virtual Machine Host OS위에 Guest OS를 가상화하는 방식입니다. 사용법이 간단하지만 각 가상 머신마다 전용 운영 체제가 있기때문에 가상머신에 구축된 애플리케이션을 실행할 때 메모리 사용량이 필요 이상으로 많아져 가상 머신이 호스트에 필요한 리소스를 모두 사용할 수 있습니다. 가상머신이 Host하는 애플리케이션과 함께 전체 운영체제와 관련 도구도 포함하기 때문입니다. 또한 운영 체제를 업데이트하거나 패치할 경우 기존 컴퓨터를 하나씩 업데이트해야 하고 각 게스트 OS를 개별적으로 패치해야 합니다. 하지만 Host OS와 Guest OS가 완벽하게 격리하기 때문에 강력한 보안 경계가 필요할 때 유용합니다. Container VM과 같이 가상화하는 방식은 무겁고 성능 문제가 발생하기에 프.. Computer Science/Programming 2021. 9. 25. [Algorithm] Stack import java.util.ArrayList; import java.util.function.Function; public class Stack { private ArrayList items = new ArrayList(); public Stack() { itemsNullCheck(); } public T peek() { return getTop(this::peekLogic); } public T pop() { return getTop(this::popLogic); } public void push(T item) { this.items.add(item); } public int size() { return this.items.size(); } public boolean empty() { return .. Algorithm 2021. 9. 21. [Spring] Jar와 War JAR (Java Archive) WAR (Web Application Archive) 모두 JAVA의 jar 툴을 이용하여 생성된 압축(아카이브) 파일이며 어플리케이션을 쉽게 배포하고 동작시킬 수 있도록 있도록 관련 파일(리소스, 속성파일 등)들을 패키징해주는 것이 주 역할입니다. Spring Boot의 장점 중 하나는 실행 가능한 JAR (Executable Jar)로 빌드하여 프로젝트를 바로 실행시킬 수 있다는 점 입니다. Jar ( Java Archive ) JAVA 어플리케이션이 동작할 수 있도록 자바 프로젝트를 압축한 파일입니다. Class (JAVA리소스, 속성 파일), 라이브러리 파일을 포함합니다. JRE(JAVA Runtime Environment)만 있어도 실행 가능합니다. War ( .. Domain/Spring 2021. 9. 18. [Spring] @Controller, @Service, @Repository @Controller 루트 컨테이너에 빈 객체로 생성해주는 어노테이션입니다. Presentation Layer Contoller를 명시하기 위해서 사용합니다. 웹 요청과 응답을 처리하는 클래스에 사용합니다. @Service 루트 컨테이너에 빈 객체로 생성해주는 어노테이션입니다. Business Layer Service를 명시하기 위해서 사용합니다. 비지니스 로직을 처리하는 클래스에 사용합니다. @Repository 루트 컨테이너에 빈 객체로 생성해주는 어노테이션입니다. Persistence Layer Repository를 명시하기 위해서 사용합니다. DB나 파일같은 외부 I/O 작업을 처리합니다. 참고자료 tmdrl5779's blog codevang's blog Domain/Spring 2021. 9. 18. [Spring] Spring MVC ( DispatcherServlet / HandlerMapping / HandlerAdapter / ViewResolver / View ) Spring MVC MVC는 Model-View-Controller의 약자로 MVC 패턴이라고 불립니다. MVC 패턴은 MVC1,MVC2가 있습니다. Spring MVC는 MVC2의 구조를 가집니다. MVC2는 Model, View, Controller가 역할을 나누어 처리하기 때문에 MVC1에 비해 확장에 유리하고, 유지보수하기 쉽다는 장점이 있습니다. Spring MVC의 동작 Client가 보낸 요청을 DispatcherServlet이 감지합니다. DispatcherServlet은 HandlerMapping에게 Controller의 탐색을 요청합니다. HandlerMapping은 Client의 요청 경로를 이용하여 Controller 빈 객체를 DispatcherServlet에 리턴합니다. Disp.. Domain/Spring 2021. 9. 18. [Spring] Servlet과 Servlet Container Servlet이란? 클라이언트 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그램입니다. 클라이언트의 Request에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트 HTML을 사용하여 Response 한다. JAVA의 스레드를 이용하여 동작한다. MVC 패턴에서의 컨트롤러로 이용된다. HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다. Servlet Container 내부에서 Singleton 형태로 존재합니다. UDP보다 속도가 느리다. HTML 변경 시 Servlet을 재차 컴파일해야 하는 단점이 있다. 서블릿은 자바로 구현 된 CGI라고 흔히 말합니다. CGI(Common Gat.. Domain/Spring 2021. 9. 18. Web Server와 Web Application Server ( Static Pages / 정적 웹 페이지 / Dynamic Pages / 동적 웹 페이지 / 웹 서버 / 웹 앱 서버 / WAS / Container / Servlet / Web Container / Servlet Container) Static Pages (정적 웹 페이지) 저장된 그대로 사용자에게 전달되는 웹 페이지입니다. 서버에 저장된 데이터가 변경되지 않는 한 사용자는 고정된 웹 페이지를 보게 됩니다. 정적 웹 페이지들은 업데이트를 전혀 하지 않거나 거의 할 필요가 없는 내용에 적절합니다. 저장된 데이터만 보여줄 수 있어 서비스가 한정적입니다. 삽입/수정/삭제 등의 작업이 모두 수동적이므로 관리가 힘듭니다. Dynamic Pages (동적 웹 페이지) 서버가 사용자의 요청에 대하여 데이터를 가공한 후 생성되는 웹 페이지입니다. 사용자의 상황, 시간, 요청 등에 따라 달라지는 웹 페이지를 보게 됩니다. 같은 페이지라도 사용자마다 다른 결과의 웹 페이지를 볼 수 있습니다. 웹 사이트의 구조에 따라 삽입/수정/삭제 등의 작업이 용이.. Computer Science/Programming 2021. 9. 17. [Spring] Component와 ComponentScan ( Component / SpringBootApplication / Bean ) Component? @Component는 개발자가 직접 작성한 Class를 Bean으로 등록할 수 있도록 해주는 어노테이션입니다. ComponentScan? @ComponentScan은 스프링 3.1부터 도입된 어노테이션입니다. ComponentScan은 스프링이 직접 클래스를 검색해서 Bean으로 등록해주는 기능입니다. 설정 클래스에 빈으로 등록하지 않아도 원하는 클래스를 빈으로 등록할 수 있으므로 설정 코드가 크게 줄어듭니다. 스프링이 검색해서 빈으로 등록할 수 있으려면 @Component 어노테이션을 붙여야 합니다. @Component 어노테이션은 해당 클래스를 스캔 대상으로 표시합니다. @ComponentScan("패키지 경로") 해당 패키지에 있는 컴포넌트 객체(@Component, @Contr.. Domain/Spring 2021. 9. 12. [Spring] 의존성 주입의 방식 ( Autowired / Inject / Resource / Bean / DI / Constructor / Setter / Field / 순환참조 ) 스프링에서 DI를 적용하는 방식은 필드 주입 방식(Field Injection), 수정자 주입 방식(Setter Injection), 생성자 주입 방식(Constructor Injection)이 있습니다. 스프링 공식 문서에서는 생성자 주입 방식(Constructor Injection)과 수정자 주입 방식(Setter Injection)만 소개하고 있지만, 실제로 필드(Field) 방식도 가능합니다. 스프링에서는 필수적인 의존성에서는 생성자 주입 방식(Constructor Injection)을, 선택적인 의존성에서는 Setter Injection를 사용하라고 합니다. 이번 글에서는 주입방식 사용방법을 예시로 나타내고 왜 생성자(Constructor) 주입 방식을 사용해야 하는지에 대해 알아보도록 하겠습니.. Domain/Spring 2021. 9. 10. 이전 1 ··· 4 5 6 7 8 9 10 ··· 14 다음