목록DEV&OPS/Java (160)
삶 가운데 남긴 기록 AACII.TISTORY.COM
서버 사이드 랜더링(SSR)은 브라우저로 필요한 화면(html)을 전송해주는데, 보통 jsp나 Thymeleaf 등을 사용합니다.그런데 REST API 서버 처럼 JSON(혹은 XML)을 이용해서 데이터를 주고 받는 경우, 무상태에다가 화면을 제공하지 않기 때문에 HttpSession이나 쿠키로 인증하는 방법에 제한을 받습니다.따라서 이런 제한을 피하기 위해 토큰을 이용해서 인증하는 방법을 JWT(JSON Web Token) 이라고 합니다.인증(Authentication): 사용자의 아이디와 비밀번호가 올바른지 확인합니다.JWT 생성: 인증에 성공하면 사용자 정보를 담은 JWT를 생성합니다.JWT 전송: 생성된 JWT를 클라이언트에게 응답으로 보냅니다.인가(Authorization)와 보호된 리소스 접근..
카카오 로그인 설정우선 카카오 계정이 필요합니다.카카오 로그인 준비를 위해서 카카오 디벨로퍼 사이트에 가서 로그인합니다.(카카오 계정으로 로그인됩니다.)https://developers.kakao.com/ Kakao Developers카카오 API를 활용하여 다양한 어플리케이션을 개발해 보세요. 카카오 로그인, 메시지 보내기, 친구 API, 인공지능 API 등을 제공합니다.developers.kakao.com로그인 한 뒤 상단에 앱 메뉴를 누르고 + 앱 생성 버튼을 클릭합니다.필수 입력 정보를 입력한 뒤 저장 버튼을 누르면 앱이 추가됩니다.방금 추가한 앱을 눌러보면 좌측에 메뉴가 나오는데 앱 > 플랫폼 키 메뉴로 들어갑니다.이 중 REST API키는 따로 보관해 둡니다.REST API키 항목 근처에 클라..
이 예제는 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 보호관리자 ..
Model과 ModelAndView의 차이점특징ModelModelAndView역할뷰에 전달할 데이터(속성)만 담는 역할 (인터페이스)데이터(Model)와 뷰 이름(View)을 모두 담는 컨테이너 (클래스)뷰 지정컨트롤러 메서드의 반환 값(String)으로 뷰 이름을 지정객체 내부의 setViewName() 메서드로 뷰 이름을 지정주요 사용처최근 Spring 개발 트렌드에서 주로 사용 (String 리턴 타입과 함께)Spring 초기에 자주 사용되었으나, 최근에는 사용 빈도가 감소반환 타입컨트롤러 메서드의 파라미터로 받으며, 메서드는 보통 뷰 이름(String)을 반환컨트롤러 메서드의 반환 타입이 됨 ModelModel 객체는 컨트롤러 메서드의 파라미터로 주입받아 사용하며, 데이터를 추가합니다. 메서드는..
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 실행 후 결과 매핑만 담당엔티티의 생명주기(조회, 변경 감지, 삭제)를 관리 (영속성 컨텍스트) 안전하게 혼..
JPA 연관관계 결정데이터베이스에서는 PK와 FK으로 엔티티 간 관계를 표현합니다.반면 JPA는 객체 지향이라서 데이터 연관관계의 방향성을 결정하는 것이 어렵습니다.예를 들어, 회원이 여러 개의 아이템을 가지고 있다고 가정하면, 회원 객체가 아이템들을 참조할 것인지, 아이템이 회원을 참조할 것인지 판단해야 합니다.JPA는 보통 변화가 많은 쪽을 기준으로 결정하거나 ERD에서 FK를 기준으로 결정합니다. 변화가 많은 쪽 기준회원과 게시물의 관계를 예를 들면, 회원들이 활동을 통해 여러 게시물이 만들어지므로 연관 관계는 게시물 기준으로 판단하는 것이 좋습니다.회원 아이디회원 이름user1사용자1user2사용자2user3사용자3user4사용자4번호제목작성자내용1제목1사용자1내용...12제목2사용자2내용...2..
주석 템플릿은 크게 두 가지로 나눌 수 있습니다.1. 파일 헤더 템플릿: 새 파일(클래스)을 만들 때 상단에 자동으로 생성되는 주석입니다.2. 라이브 템플릿: 코드 중간에 단축키로 미리 정의된 주석 블록을 삽입하는 기능입니다. 파일 헤더 템플릿 설정새 파일(클래스, 인터페이스)을 만들 때 주석을 자동으로 상단에 추가해주는 기능을 설정해봅시다. 설정(Settings/Preferences) 열기:Windows/Linux: File > Settings (단축키: Ctrl + Alt + S)macOS: IntelliJ IDEA > Preferences (단축키: Cmd + ,)템플릿 위치로 이동: Editor > File and Code Templates 로 이동합니다.File Header 수정:가운데 탭에서 ..
jdk11, gradle 6, springframework 5 기준으로 작성되었습니다. FreeMarker자바 기반 서버측 템플릿 엔진으로 뷰 레이어(프레젠테이션 레이어) 개발에 사용됩니다.서버에서 데이터를 처리하고 freemarker 템플릿으로 뷰를 생성하여 최종 HTML을 브라우저에 전송합니다.미리 정의된 템플릿고 동적으로 생성된 데이터를 결합시켜주는 소프트웨어입니다.데이터 처리용 비즈니스 로직과 화면 표시용 프레젠테이션 로직을 분리하는데 사용합니다.자바 코드에서는 데이터를 준비하고 freemarker 템플릿 파일(FTL)에서는 그 데이터를 사용자에게 보여주는 방식으로 정의합니다. 1. 디렉티브(Directives): 템플릿이 수행해야 할 작업을 지정예) 2. 보간(Interpolations): 데..
여기서는 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..
관점 지향(Aspect Oriented Programming)로깅보안/인증트랜잭션리소스 풀링에러 검사 / 처리정책멀티 스레드 안전 관리데이터 영속처리위 항목들은 소프트웨어 개발 시 발생하는 공통적인 문제들입니다.핵심 관심(core concern)은 업무 로직을 말합니다.횡단 관심(cross-cutting concern)은 위에서 언급한 로깅이나 보안등 공통 시스템 로직을 말합니다. 이처럼 업무 기능과 시스템 기능간에 결합성을 제거하도록 분리하여 작성하는 방법을 관점 지향이라고 합니다. 관점 지향 용어advice : 관점이 언제, 무엇을 하는지를 정의joinpoint : 관점이 실행될 수 있는 위치들pointcut : joinpoint 중에서 advice 하는 위치(어디서)aspect : advice +..
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..
