본문 바로가기

Spring23

Spring Legacy / SQL 로그 설정하기 MyBatis는 내부적으로 JDBC의 PreparedStatement를 이용해서 SQL을 처리한다. 따라서 SQL에 전달되는 파라미터는 JDBC에서와 같이 ?로 치환되어 처리되는데, 이때 만약 복잡한 SQL의 경우 ?로 나오는 값이 제대로 되었는지 확인하기가 쉽지 않아 실행된 SQL의 내용을 정확히 확인하기 어렵다. 이러한 문제를 해결하기 위해서 SQL을 변환해서 PreparedStatement에 사용된 ?가 어떤 값으로 처리되었는지 로그를 통해 확인해보자. SQL 로그를 보기 위해선 log4jdbc-log4j2 라이브러리를 사용해야한다. SQL 로그를 확인하기 위해서는 어떠한 준비가 필요할까? 절차는 다음과 같다. log4jdbc-log4j2 라이브러리 추가 로그설정파일 추가 JDBC연결 1. log4.. 2020. 9. 23.
Spring Legacy / MyBatis 연동 및 사용하기 Spring에서 SQL 맵핑 프레임워크인 MyBatis를 사용하려면 어떻게 해야할까? 순서는 다음과 같다. MyBatis 관련 라이브러리 추가 SqlSessionFactory 등록 Mapper 스캔 설정 Mapper 작성 (사용예제) 1. MyBatis 관련 라이브러리 추가 MyBatis를 연동하기 위해 필요한 라이브러리는 총 4개가 있다. - mybatis / mybatis-spring : MyBatis와 스프링 연동용 라이브러리 //mybatis org.mybatis mybatis 3.4.6 //mybatis-spring org.mybatis mybatis-spring 1.3.2 - spring-jdbc / spring-tx : 스프링에서 DB처리와 트랜잭션 처리(해당 라이브러리들은 MyBatis와 .. 2020. 9. 23.
Spring / 퍼시스턴스 프레임워크 퍼시스턴스 프레임워크란? 퍼시스턴스 프레임워크란 데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들의 집합이다. 퍼시스턴스 프레임워크를 사용하면 JDBC프로그래밍의 복잡함이나 번거로움 없이 간단한 작업만으로도 DB와 연동되는 시스템을 빠르게 개발할 수 있으며, 안정적인 구동도 보장한다. 퍼시스턴스 프레임워크의 종류 퍼시스턴스 프레임워크는 크게 'SQL 맵퍼' 와 '객체관계 맵퍼(ORM)' 로 나뉜다. 'SQL 맵퍼' 는 SQL 문장으로 직접 DB 데이터를 다루는 프레임워크이고 'ORM' 은 자바 객체를 통해 간접적으로 DB 데이터를 다루는 프레임워크이다. SQL 맵퍼의 종류 Mybatis JdbcTempletes ORM의 종류 Hibernate TopLink 2020. 9. 22.
Spring Boot / JSP를 사용하기 위한 라이브러리 Spring에서는 다양한 템플릿 엔진을 사용할 수 있다. 그 중 JSP는 아래와 같은 라이브러리를 필요로 한다. mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper Maven Repository: org.apache.tomcat.embed » tomcat-embed-jasper Core Tomcat implementation VersionRepositoryUsagesDate10.0.x10.0.0-M8Central 0 Sep, 202010.0.0-M7Central 0 Jul, 202010.0.0-M6Central1Jun, 202010.0.0-M5Central 0 May, 202010.0.0-M4Central 0 Apr, 202010.. 2020. 9. 16.
Spring Legacy / DBCP 설정하기 웹 애플리케이션의 경우 일반적으로 여러 명의 사용자를 동시에 처리해야하기 때문에 DB연결 시 커넥션풀을 이용한다. 커넥션 풀은 스프링에 등록해서 사용하는 것이 좋으며, JAVA단에서는 DataSource라는 인터페이스를 통해 커넥션 풀을 사용한다. DataSource는 매번 데이터베이스와 연결하는 방식이 아닌 미리 연결을 맺어주고 반환하는 구조이기 때문에 성능 향상에 도움이 된다. 이제 본론으로 들어가자. 커넥션 풀은 매우 많은 종류가 있는데, 이번 포스터에서는 최근 유행하고 있는 HikariCP를 사용해 보겠다. 1. 커넥션 풀 라이브러리 추가 com.zaxxer HikariCP 2.7.8 HikariCP 버전은 2.7.4~2.7.8을 권장한다. 2. DataSource 설정 @Configuration.. 2020. 9. 15.
Spring Boot / JSP 사용시 필요한 시큐리티 라이브러리 및 태그 - 라이브러리 - org.springframework.security spring-security-taglibs - 태그 - 2020. 8. 11.
Spring Boot / 트랜잭션 롤백하기 // 둘중에 하나라도 실패하면 rollback 하기 @Transactional(rollbackFor = Exception.class) public void updateAndDelete(Post post) { try { mRepo.update(post); mRepo.delete(post.getId()); System.out.println("DB 정상"); } catch (Exception e) { System.out.println("DB 오류"); throw new RuntimeException(e); } } 2020. 8. 3.
Spring / Security란? 스프링 시큐리티란? 스프링 시큐리티는 인증, 인가, 일반적인 공격에 대한 보호를 제공하는 프레임워크이다. 시큐리티는 인증과 인가를 분리하여 아키텍쳐가 설계되어 있는데, 해당 포스트에서는 아키텍쳐와 인증 프로세스 그리고 인증 프로세스에서 사용되는 주요 컴포넌트에 대해 살펴보겠다. 인증 인증이란 컴퓨터 시스템 사용자의 신원(주소, 신분 등)같은 주장을 증명하는 행위이다. 사람 또는 사물의 신원을 나타내는 행위와 대조적으로 인증은 그 신원을 검증하는 프로세스이다. 즉, 인증이란 사용자 이름, 사용자 아이디, 사용자 패스워드 등과 같은 자격을 증명하는 것을 검사하여 신분을 검증하는 것이다. 그렇다면 어떻게 스프링에서 시큐리티가 동작하는지 다음과 같은 시나리오와 함께 살펴보자. -시나리오- 사용자 이름과 암호를 .. 2020. 8. 2.
Spring Legacy / JDBC 연결 테스트하기 프로젝트에 있어서 단위테스트는 항상 중요하다. 이번 포스트에서는 JDBC를 셋팅하고 연결이 가능한지 확인해보는 테스트를 진행한다. 코드 예시는 다음과 같다. package org.zerock.persistence; import static org.junit.Assert.fail; import java.sql.Connection; import java.sql.DriverManager; import org.junit.Test; import lombok.extern.log4j.Log4j; @Log4j public class JDBCTests { static { try { Class.forName("oracle.jdbc.driver.OracleDriver"); } catch (Exception e) { e.pr.. 2020. 7. 30.
Spring Legacy / 단위 테스트하는 방법 개발자들은 프로젝트에서 수많은 테스트를 거쳐 서비스를 릴리즈하게된다. 그만큼 테스트는 프로젝트 진행에 있어서 중요한 요소이며, 이러한 테스트를 수행하는 방법을 알아야 질 높은 프로젝트를 완성할 수 있다. 그럼 테스트 코드는 어떻게 짜여질까? 아래 예제를 통해 살펴보자. 다음 코드는 'src/test/java' 폴더에 작성된 단위 테스트 목적의 자바파일이다. 보통 테스트 자바파일은 'src/test/java' 디렉토리에 셋팅되며 아래와 같은 코드구성으로 테스트가 이루어진다. package org.zerock.sample; import static org.junit.Assert.assertNotNull; import org.junit.Test; import org.junit.runner.RunWith; im.. 2020. 7. 29.
Spring Legacy / DI설계 방법 글을 읽기에 앞서 DI의 개념이 아직 잘 잡히지 않았다면 아래 링크 참조. https://swdevelopment.tistory.com/272 Spring / IoC와 DI *loC란? IoC는 Inversion of Control의 약자로 프레임워크의 핵심 요소이며 스프링에도 예외없이 존재하는 개념이다. IoC는 해석하면 제어의 역전 또는 제어의 반전이며 이것은 메소드나 객체의 호출작�� swdevelopment.tistory.com !이 글은 Lombok과 spring-test 라이브러리를 활용하여 DI를 테스트한다. DI를 하기전 먼저해야할 것이있다. 바로 DI 설정이다. 스프링은 클래스에서 객체를 생성하고 객체들의 의존성에 대한 처리 작업까지 내부에서 모든 것이 처리된다. 스프링에서 관리되는 객체.. 2020. 7. 24.
Spring Legacy / 자바파일로 스프링 관련 설정하기 STS툴에서 레거시 프로젝트의 경우 XML기반으로 스프링관련 설정을 하도록 구성되어있으며, 스프링 3버전 이후부터는 XML뿐만이 아닌 자바클래스 파일을 이용하는 스프링 설정을 지원한다. 자바로 스프링 설정을한다라.. 어떻게 할 수 있을까. 지금부터 알아보자. 자바로 스프링을 설정하는 과정은 크게 다음과 같다. web.xml 파일 삭제 및 스프링 관련 파일 삭제 pom.xml 수정 및 스프링 버전 변경 Java 설정 관련 패키지 생성 1. 자바로 설정하기 위해 우선 기본적으로 레거시 프로젝트가 가지고 있는 설정관련 XML파일을 삭제 삭제해야할 XML파일은 web.xml, servlet-context.xml, root-context.xml 이다. servlet-context.xml과 root-context... 2020. 7. 23.
Spring Boot / @ResponseBody와 @RequestBody 오늘 포스팅 내용은 @ResponseBody와 @RequestBody 2가지를 다룬다. 이 두가지 어노테이션은 어떠한 상황에 사용될까? 지금부터 알아보자. 1. @ResponseBody 클라이언트와 서버간의 통신에 있어서 주고받는 것은 크게 2가지가 있다. 바로 파일과 데이터이다. 서버가 클라이언트에게 파일을 리턴해줄 때는 @Controller 어노테이션을 사용하고, 데이터를 리턴해줄 때는 @RestController어노테이션을 사용한다. 그런데 만약 @Controller가 작성된 자바파일에서 데이터를 클라이언트에게 리턴해주고 싶을 땐 어떻게 해야할까? 이때 지금 다루는 @ResponseBody 어노테이션을 사용한다. @ResponseBody는 간단히 말해 @Controller 어노테이션이 달린 자바파일.. 2020. 7. 16.
Spring Boot / @ComponentScan과 @Controller, @Service, @Repository, @Configuration, @Component 이번 포스팅에서는 @ComponentScan 어노테이션과 이 어노테이션이 읽어내는 어노테이션에 대해 살펴보자. @ComponentScan @ComponentScan 어노테이션은 프로젝트 생성 시 프로젝트명과 함께 뒤에 Application.java가 붙어 생성되는 파일에 작성되어있는 @SpringBootApplication 어노테이션에 내장되어 있는 어노테이션이다. @ComponentScan 어노테이션의 주 기능은 첫째, 스캔 위치를 설정하고 둘째, 필터를 통해 특정 어노테이션의 스캔여부를 설정한다. 이 어노테이션은 기본적으로 프로젝트 생성 시 만든 메인패키지의 이하 모든 패키지의 어노테이션들을 전부 스캔한다. 스캔하는 대상 어노테이션은 다음과 같다. @Controller @Service @Reposit.. 2020. 7. 16.
Spring Boot / pom.xml 스프링부트 프로젝트를 생성하면 각각 맡은 역할이 있는 디렉토리 및 파일들이 구성된다. 이번 포스팅에서는 그 중 라이브러리의 다운 및 삭제를 주로 담당하는 pom.xml에 대하여 살펴보자. pom.xml? pom.xml은 방금 언급하였듯이 라이브러리의 다운로드 및 삭제를 담당하는 파일이다. pom.xml의 예시는 아래와 같다. 위 이미지를 보면 여러 태그들이 존재하는데 필자도 모든 태그들에 대해 이해하고 있지 못하고 있으므로 자바버전과 라이브러리에 관련된 태그만 짚어보겠다. 우선 태그 내에 존재하는 태그는 누구나 알 수 있듯이 자바버전을 설정하는 태그이다. 또한 태그 내에 여러 태그들이 존재하는데 이것은 라이브러를 사용할때 사용하는 태그이며 MAVEN을 이용시에 사용하는 태그이다. 프로젝트 생성 직후 po.. 2020. 7. 15.
Spring Boot / 프로젝트 생성하기 스프링부트가 무엇인지 간략히 알아보았으니 이제 스프링부트 프로젝트를 생성해보자 툴은 STS를 사용하였다. 1. STS툴을 켜고 'Spring Starter Project' 클릭 2. 빨간 박스에 해당하는 부분들을 사용자 의도에 따라 설정하고 'Next' 잠깐! gradle, maven, yarn, npm, pip등은 라이브러리 관리도구 또는 버전관리 도구 또는 의존성 관리도구라고하며 자바코드 + 라이브러리를 관리하며 패킹을 할수 있다. 3. 빨간 박스는 프로젝트 생성과 동시에 설치하고자하는 라이브러리들을 선택할 수 있는 공간으로, 내가 필요로하는 라이브러리를 채택하고 'Next' 여기서 핵심이 되는 라이브러리는 많지만 그중에서도 2가지를 꼽자면 'Spring Boot DevTools'와 'Spring W.. 2020. 7. 13.
Spring / Filter와 Interceptor Filter -Abstract- Filter : 요청과 응답을 걸러 정제하는 역할을 한다. Filter 개념 Filter는 J2EE의 표준이며 Servlet2.3부터 지원되는 기능이다. Filter는 Servlet Container에 의해 동작이 제어되는 Java Class로 HTTP Request가 Service에 도착하기전, HTTP Response가 Client에 도착하기 전에 제어하는 역할을 한다. Request를 처리할 때에 Dispatcher Servlet이 작업을 처리하기 전에 동작하고 Response를 처리할 때엔 Dispatcher Servlet에 의해 작업이 끝난 이후 동작한다. 또한 자원의 처리가 끝난 후 응답내용에 대해서도 변경하는 처리를 할 수 있다. 보통 web.xml에 등록하고.. 2020. 7. 10.
Spring / AOP란? AOP -Abstract- AOP는 애플리케이션 전체에 걸쳐 사용되는 기능을 재사용하도록 지원하는 것이다. AOP 개념 객체지향의 기본원칙을 적용하여도 핵심기능에서 부가기능을 분리하여 모듈화하는 것은 어려운일이다. 이러한 고충을 덜고자 탄생한 개념이 AOP이며 이러한 AOP는 애플리케이션에서의 기능분리와 핵심기능에서 부가기능을 분리하여 모듈화를 돕는다. 이렇게 분리한 부가기능을 Aspect라는 독특한 모듈형태로 만들어 설계하고 개발하는 방법을 AOP라고 하는 것이다. AOP는 OOP가 가지는 문제점을 보완하기위해 나온 개념이라고 보면된다. AOP는 부가기능을 Aspect로 정의하며, 핵심기능에서 부가기능을 분리함으로써 핵심기능을 설계하고 구현할 때 객체지향적인 가치를 지킬 수 있도록 도와준다. AOP 예.. 2020. 7. 10.
Spring / IoC와 DI *loC란? IoC는 Inversion of Control의 약자로 프레임워크의 핵심 요소이며 스프링에도 예외없이 존재하는 개념이다. IoC는 해석하면 제어의 역전 또는 제어의 반전이며 이것은 메소드나 객체의 호출작업이 개발자에 의해 결정되는 것이 아닌 외부(스프링)에서 결정되는 것을 의미한다. 제어의 반전 개념은 이미 폭넓게 적용되고 있다. 일반적으로 자바 프로그램은 main()메서드로부터 시작하여 개발자가 미리 정한 로직흐름을 따라 객체가 생성되고 실행된다. 하지만 서블릿은 다르다. 서블릿은 개발해서 서버에 배포할 수는 있지만, 배포하고 난 후에는 개발자가 직접 제어할 수 있는 방법이 없다. 대신 서블릿에 대한 제어 권한을 가진 컨테이너가 적절한 시점에 서블릿 클래스이 객체를 만들고 그안의 메서드를 .. 2020. 7. 10.
Spring / Spring이란? *Spring의 개념 스프링이란 자바 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크이며 스프링 프레임워크를 말한다. 스프링은 동적인 웹 사이트를 개발하기 위한 여러 가지 서비스를 제공하며, 대한민국 공공기관의 웹 서비스 개발 시 사용을 권장하고 있는 전자정부 표준프레임워크의 기반 기술로서 사용되고 있다. *Spring의 특징 오픈소스이다. loC 컨테이너를 가진다. DI를 지원한다. 엄청나게 많은 필터를 가지고 있다. 엄청나게 많은 어노테이션을 가지고 있다. MessageConverter를 가지고 있다. (기본값은 현재 JSON이다.) BufferedReader와 BufferedWriter를 쉽게 사용할 수 있다. 꾸준히 발전하고 있다. *Spring의 주요 모듈 스프링에서 사용되는 주요 모듈은 다음과.. 2020. 7. 10.
Spring Boot / 스프링부트란? Spring Boot란 -Abstract- 스프링부트는 Java로 어플리케이션을 쉽고, 빠르고, 간편하게 개발할 수 있도록 각종 라이브러리들을 모아놓은 도구이다. Spring Boot 개념 스프링 부트는 실행만 하면 스프링 기반의 상용화가 가능한 애플리케이션을 쉽게 만들기 위해 단독 실행을 가능케해주는 스프링 프로젝트이다. 즉, 스프링을 쉽게 사용할 수 있도록 필요한 설정을 대부분 미리 셋팅해 놓은 도구라고 할 수 있다. Spring Boot 특징 단독으로 실행이 가능한 스프링 애플리케이션을 생성한다. Tomcat, Jetty, Undertow를 내장하고 있다. 기본설정이 되어있는 starter컴포넌트를 제공한다. 상용화에 필요한 통계, 상태 체크, 외부 설정 등을 제공한다. 설정을 위한 XML코드를 생.. 2020. 7. 10.
Spring / Understanding MicroSERVICE Architecture www.slideshare.net/kashifalisiddiqui/understanding-microservice-architecture-with-java-spring-boot Understanding MicroSERVICE Architecture with Java & Spring Boot This is a deep journey into the realm of "microservice architecture", and in that I will try to cover each inch of it, but with a fixed tech stack of Java with… www.slideshare.net 2020. 6. 16.
Spring batch에서 멀티스레드로 Step실행하기 jojoldu.tistory.com/493 Spring Batch에서 MultiThread로 Step 실행하기 일반적으로 Spring Batch는 단일 쓰레드에서 실행됩니다. 즉, 모든 것이 순차적으로 실행되는 것을 의미하는데요. Spring Batch에서는 이를 병렬로 실행할 수 있는 방법을 여러가지 지원합니다. 이번 �� jojoldu.tistory.com 2020. 5. 31.