목록spring (20)
삶 가운데 남긴 기록 AACII.TISTORY.COM
이 예제는 Spring Boot 3.5.15 + Java 17 + Spring Security 6 + PostgreSQL + Spring Data JPA + Gradle + Thymeleaf 조합으로 구성합니다.Spring Boot 공식 문서에는 현재 3.5.15가 안정 버전 계열로 제공되고 있으며, Spring Security의 DB 기반 폼 로그인은 UserDetailsService, PasswordEncoder, DaoAuthenticationProvider를 중심으로 동작합니다. 완성되는 기능은 다음과 같습니다.회원가입BCrypt 비밀번호 암호화PostgreSQL 사용자 저장아이디와 비밀번호 로그인사용자·관리자 권한 구분로그인 성공 후 메인 페이지 이동로그인 실패 메시지로그아웃CSRF 보호관리자 ..
MyBatis 와 Spring Data JPA 비교 특징MyBatisSpring Data JPA패러다임SQL 매퍼 (SQL-Centric)ORM (Object-Relational Mapping) (Object-Centric)SQL 관리개발자가 XML이나 어노테이션에 직접 SQL 작성기본적인 CRUD SQL은 프레임워크가 자동 생성개발 속도Mapper와 XML을 모두 작성해야 함Repository 인터페이스 상속만으로 CRUD 완성 (빠름)복잡한 쿼리SQL을 직접 제어하므로 복잡한 조인, 동적 쿼리 작성, 속도 튜닝 등이 용이JPQL이나 QueryDSL을 사용해야 하며, 때로 복잡함영속성 관리SQL 실행 후 결과 매핑만 담당엔티티의 생명주기(조회, 변경 감지, 삭제)를 관리 (영속성 컨텍스트) MyBa..
Model과 ModelAndView의 차이점특징ModelModelAndView역할뷰에 전달할 데이터(속성)만 담는 역할 (인터페이스)데이터(Model)와 뷰 이름(View)을 모두 담는 컨테이너 (클래스)뷰 지정컨트롤러 메서드의 반환 값(String)으로 뷰 이름을 지정객체 내부의 setViewName() 메서드로 뷰 이름을 지정주요 사용처최근 Spring 개발 트렌드에서 주로 사용 (String 리턴 타입과 함께)Spring 초기에 자주 사용되었으나, 최근에는 사용 빈도가 감소반환 타입컨트롤러 메서드의 파라미터로 받으며, 메서드는 보통 뷰 이름(String)을 반환컨트롤러 메서드의 반환 타입이 됨 ModelModel 객체는 컨트롤러 메서드의 파라미터로 주입받아 사용하며, 데이터를 추가합니다. 메서드는..
여기서는 limit 기능이 존재하는 DBMS를 대상으로 페이징 처리를 다룹니다.Spring MVC 패턴으로 lombok과 mybatis를 이용한다고 가정합니다. LIMITSELECT * FROM 테이블이름 ORDER BY tno DESC LIMIT 0, 10; -- 0개 건너 뛰고 10개 표시: 즉 1 page 보기SELECT * FROM 테이블이름 ORDER BY tno DESC LIMIT 10, 10; -- 10개 건너 뛰고 10개 표시:즉 2 page 보기SELECT * FROM 테이블이름 ORDER BY tno DESC LIMIT 20, 10; -- 20개 건너 뛰고 10개 표시:즉 3 page 보기 위 예제를 보면 아시겠지만 limit 건너뛰어야할게시물수, 가져와야할게시물수.이렇게 해당 페이지를..
여기서는 한국어와 영어만을 대상으로 합니다. properties 파일 작성Spring MVC 프로젝트에서... src/main/resources 경로에 message_ko.properties 와 message_en.properties 파일을 생성합니다.그러면 빌드와 배포를 했을 때 WEB-INF/classes 경로(classpath)에 프로퍼티 파일들이 생성됩니다.이 프로퍼티 파일들은 유니코드로 저장되며, 이클립스를 전자정부프레임워크를 사용하거나 properties editor 플러그인을 사용하면 자동으로 유니코드를 한국어로 표기해줍니다.Help > Install New Software... > Add...Name : properties editorLocation : http://propedit.sour..
Quartz 1.8.6Spring3.X 프로젝트에서는 Quartz 2.X 이상을 지원하지 않아서 보통 Quartz 1.8.6을 많이 사용합니다.http://www.quartz-scheduler.org/downloads/ Downloads www.quartz-scheduler.org Maven pom.xml org.springframework spring-core 3.1.2.RELEASE org.springframework spring-context-support 3.1.2.RELEASE org.springframework spring-tx ..
html 파일에 한글 설정 server.xml 한글 설정GET방식에서는 질의 문자열들을 URI에 포함되기 때문에 URI인코딩 처리 작업을 해야 합니다.server.xml 파일에 URIEncoding="UTF-8" 프로퍼티를 설정합니다. web.xml 한글 설정 encodingFilter org.springframework.web.filter.CharacterEncodingFilter encoding UTF-8 forceEncoding true encodingFilter /* POST 전송 방식은 요청 body에 담아 전달됩니다.CharacterEncodingFilter는 http..
Spring bean을 XML로 관리 할 수 있지만, bean객체가 많아지면 XML 설정도 많아져 불편해집니다.그래서 나온 방법이 auto wiring(bean 연결) 과 annotation wiring(bean 연결) 입니다. annotation wiring어노테이션 와이어링을 사용하기 위해서는 context를 관리하는 XML 설정 파일에 context 네임스페이스를 추가해야 합니다. 이렇게 패키지 이름을 component-scan 으로 지정해주면 Spring이 자동으로 bean을 스캔해서 발견해줍니다. @Autowired Spring의 기본 의존성 주입을 위한 어노테이션입니다.필드, 생성자, setter 메서드에 사용할 수 있습니다.타입 와이어링을 시도 한 후 실패하면 이름 와이어링으로 후보 be..
Spring bean스프링 프레임워크가 관리하는 클래스들의 모든 인스턴스 객체들을 Spring bean 이라고 합니다.Spring Framework에서 "Bean"은 Spring IoC(Inversion of Control) 컨테이너에 의해 인스턴스화, 구성 및 관리되는 객체(Object)를 의미합니다.Spring Bean의 특징:관리 주체: 객체의 생성(인스턴스화), 설정(의존성 주입), 생명주기(초기화, 소멸)를 Spring IoC 컨테이너가 전적으로 관리합니다.설정: 클래스에 @Component, @Service, @Repository, @Controller와 같은 Stereotype 애노테이션을 붙이거나, @Configuration 클래스 내부의 @Bean 메서드를 통해 등록합니다.규약: Spri..
Spring MVC 프로젝트 구조 설명src/main/java/ : 자바 소스 경로src/main/resources/ : 실행시 자동 참고되는 경로(주로 설정파일, log4j.xml 등등)src/test/java/ : 테스트 자바 코드 경로src/test/resources/ : 테스트 관련 설정 파일 경로src/webapp/WEB-INF/spring/appServlet/ : sevlet-context.xml 외 spring 설정 파일src/webapp/WEB-INF/spring/ : root-context.xml 외 spring 설정 파일src/webapp/WEB-INF/views/ : MVC 패턴 중 view 페이지(jsp) 들이 위치 한 경로src/webapp/WEB-INF/ : tomcat의 ..
인터페이스를 이용한 느슨한 결합의 필요성애플리케이션이 프로젝트 도중 설계가 바뀌거나 유지 보수 중에 클래스에 변경이 이루어 지는 경우는 흔하게 발생합니다.그런 상황에 대응하기 위해 스프링에서는 인터페이스를 이용해 클래스간 느슨한 결합을 하도록해서 의존 관계에 있는 클래스들이 도중에 바뀌더라도 인터페이스가 바뀌지 않는 이상 다른 클래스에 없도록 하는 것입니다. 의존성 주입(Dependency Injection)의존성 주입은 디자인 패턴으로 제어의 역전(Inversion of Control)을 구현하기 위한 방법중의 하나입니다.객체를 직접 생성하는 것이 아닌 외부에서 생성하여 주입 받는 방법을 말합니다.예를 들어 컨트롤러들은 서비스 객체들을 가져다 주입 받아 사용하는데, 이런 컨트롤러들은 서비스 객체에 ..
Spring 개발을 위해 STS를 다운로드 후 압축을 풀다가 파일 경로가 260자 이상 제한에 걸려서 압축 풀기에 실패했습니다. 반디집 설정에도 260자 넘어도 압축이 풀리도록 설정되어 있는데도 실패했죠. 반디집은 환경설정 > 기타 항목에 있습니다. Windows 10 1607 버전부터는 NTFS 파일시스템에서 길이 제한을 늘릴 수 있습니다. 1. 윈도우 키 + R 키를 눌러서 gpedit.msc 를 입력해서 그룹 정책 편집기를 실행합니다. 2. 컴퓨터 구성 -> 관리 템플릿 -> 시스템 -> 파일 시스템 경로를 찾아 갑니다. 3. "Win32 긴 경로 사용"을 선택해 사용 상태로 바꿔줍니다. 4. cmd 명령 프롬프트를 열고 gpupdate 를 실행해서 그룹 정책을 업데이트 합니다. 그러면 STS 압축..
JDK 설치 오라클 사이트에서 JDK를 다운받아서 설치합니다. 여기서는 JDK11을 기준으로 합니다. 설치한 후에는 환경 변수에서 JAVA_HOME 을 등록하고 JDK가 설치된 경로를 지정해줍니다. 환경변수의 PATH에는 %JAVA_HOME%bin 으로 저장합니다. 설정이 완료된 뒤에는 명령프롬프트(cmd)에서 javac 명령어를 입력해서 컴파일러가 정상 실행되는지 확인합니다. 이클립스(STS, 전자정부프레임워크) 설정 Lombok 라이브러리의 안정성 때문에 이클립스를 JRE환경이 아닌 JDK환경에서 구동되도록 설정을 변경합니다. eclipse.ini(혹은 sts.ini) 파일의 상단에 아래와 같은 내용을 추가합니다. (윈도우 경로 기준) -vm JDK설치경로\bin\javaw.exe 이클립스 한글 인코..
Bcrypt 사용 예 maven이나 gradle로 관련 라이브러리를 추가 후 아래와 같이 사용합니다. String pw = "pw1234!"; //실제 데이터베이스에 저장될 패스워드의 해시값 String hashed = BCrypt.hashpw(pw, BCrypt.gensalt()); //입력된 패스워드와 해시되어 저장된 패스워드를 비교 boolean isValid = BCrypt.checkpw(pw, hashed); salt 해시된 패스워드를 저장한 테이블인 Rainbow Table 을 이용한 해킹 공격을 막기 위하여 랜덤 생성한 salt값을 더한 뒤 다시한 번 해시 값을 얻어서 Rainbow Table 을 이용한 공격을 막습니다. Bcrypt 해시 값의 예 $2a$10$vI8aWBnW3fID.ZQ4/..
서비스(비즈니스 로직) 서비스 레이어는 controller와 persistence 사이에서 비즈니스 로직을 수행하는 역할입니다. service 패키지를 만들어 아래 예제를 작성합니다. package ds.co.kr.todo.service; import org.springframework.stereotype.Service; @Service public class TodoService { public String testService() { return "Test Service"; } } @Service 어노테이션은 비즈니스 로직을 수행하는 컴포넌트이며 서비스 레이어임을 알려주는 어노테이션입니다. 스테레오 타입 어노테이션으로 내부에 @Component를 포함하고 있습니다. @RestController 에도 ..
