T 타입 객체의 래퍼클래스래퍼 클래스 : Integer , Long … 제네릭을 이용해야 하는 ClassT 타입 : 모든 종류의 객체를 뜻함obtional 은 모든 종류의 객체를 다룰 수 있는 Class임null 도 다룰 수 있기 때문에 간접적으로 null 을 다뤄야
문자열의 형식을 설정해주는 라이브러리%d - 10진수 형식%s - 문자열 형식%f - 실수형 형식Locale 설정%t - 날짜시간 형식%c - 유니코드 문자 형식%o , %x - 8진수, 16진수 형식10 진수 integer 의 형식을 설정할 때 사용% 와 d 사이에
Colletion framework 에 포함되어있는 interface 이다.배열 또는 배열과 유사한 자료구조를 순회하는 기능을 제공한다.ex ) Set , List …반복문과 다르게 index 를 순회하면서 index 를 제거할 수 있다.Colletion framewo
Test code 를 먼저 만들고, 실제 프로덕션 code 를 나중에 만드는 개발 방법DDDTDD실패하는 Test 를 구현한다.Test 가 성공하도록 프로덕션 code 를 구현하낟.프로덕션 code 와 test code 를 리팩토링 한다.1번부터 반복한다.변화에 대한
BeanFactory -상속→ ApplicationContext -상속→ AnnotationConfigApplicationContextApplicationContext 는 interface 이다.AnnotationConfigApplicationContext애노테이션 기
HTTP Servlet 관련 로직을 모아놓은 Class 이다.Request 와 Response 를 사용해 쿠키와 세션처리를 해결한다.모든 쿠키에 “yes” 라는 이름을 붙이고 값을 Username 으로 설정해놓았다.쿠키를 조회할 때 어떤 username 으로 로그인 했
Http Servlet 의 Request 와 Response 관련 로직을 별도의 Class 인 Rq 로 분리했다.Session 이름과 value 를 매개변수로 받아 Session 을 생성한다.지금은 공부하는 단계라 Session 이름은 “loginedMemberId"
Web Application 을 만들 때 필요한 인터페이스이다.Spring Framework 가 제공하는 MVC 패턴을 사용한 Web Service 제작기능Spring Web MVC 는 Swervlet 을 사용해 Web Application 을 제작한다.Spring W
build.grade 에서 간편하게 설정을 추가 변경을 할 수 있다.Dependencies 의 코드가 간략하게 줄어들고,자동으로 버전관리까지 해준다.자체적으로 Tomcat 을 지원하고, 다른 서버로 설정을 간편하게 바꿀 수 있다.Spring Boot 를 사용하는 것 만
🔗 Project 생성 링크 Gradle GroovySpring Boot 2.7.7Java 11DependenciesSpring webValidation 🔗 Validation 을 추가해야하는 이유Thymeleaf 🔗 Thymeleaf 공식 홈페이지jpaH2 D
Intellij 로 변경java 버전 변경gradle → 17 open JDK Preference → plugin → lombok 최신버전인지 확인enable annotation processing 에 체크롬복 같은 외부 라이브러리가 컴파일 시 문제없이 작동하도록 해주
application.yml 에 환경설정 하기🔗 환경설정의 자세한 내용🔗 Spring Boot 공식 사용 설명서(https://spring.io/projects/spring-boot\[🔗 Logging level 설정에 관한 설명서](https:
터미널에서 db 접속KIN시퀄 프로 접속데이터 베이스 생성select version();버전을 확인할 수 있는 SQL 함수8.~.~ 이면 my sqlMy // SQL 은 아래 내용을 추가해주면 된다.SSR 을 배우는 것이 목표기 때문에 타임리프 관련 환경설정도 포함되어
Web Application 을 만들 때 필요한 interface 이다.Web Application 의 요청 응답 처리 과정🔗 Servlet VS. Spring초기 Web Server는 클라이언트의 요청에 대해서 정적인 페이지로만 응답할 수 있었다.이후 Web Ser
객체화된 SQL 문을 개발자가 직접 작성해야 한다.Connection 을 직접 관리해야 한다.수동으로 Connection 객체를 열고 닫아야 함Preparestatement 객체를 통해 조건을 전달하고, resultset 객체를 통해 전달 받아야 한다.Connectio
Groovy 를 기반으로 한 오픈소스 빌드 도구거의 모든 타입의 소프트웨어를 빌드할 수 있는 빌드 자동화 시스템소스코드를 컴파일, 테스트, 정적분석 등을 수행해 실행 가능한 Application 으로 만들어주는 과정시간이 흐르면서 다양한 Library 들이 등장하고 이
Jump to String Boot 를 공부하면서 궁금증이 생겼다.내가 알기론 Entity 의 참조 필드를 선언해 줄 때N : 1 관계에선 new 를 사용해 초기화 해줘야 되는걸로 알고있었는데Jump to Spring boot 에서는 초기화를 하지 않는 방식으로 적혀있
✏️ 발단 Jump to String Boot 를 공부하면서 궁금증이 생겼다. 내가 알기론 Entity 의 참조 필드를 선언해 줄 때 N : 1 관계에선 new 를 사용해 초기화 해줘야 되는걸로 알고있었는데 Jump to Spring boot 에서는 초기화를 하
단순히 모든 data 를 조회하는 find all 이 아닌,페이징 data 를 추가로 받는 find all 을 생성한다.getList 의 매개변수에 조회를 원하는 페이지 번호를 받는다.Sort.Order.desc()column 을 기준으로 정렬을 해주는 라이브러리이다.
별도의 설정을 하지않고 paging 을 하게되면 먼저 등록한 순서대로 web page 에 나타나게 된다.하지만 실제로 운영되고있는 웹사이트들 에서는 대부분 최근에 등록된 게시물이 가장 위로 나타나게 역순으로 정렬시켜놓는다.나열 인덱스역순 정렬하기 전 게시물이 원래 갖고
JPA 의 Entity 는 반드시 public 또는 protected 로 선언된 기본생성자가 필요하다.Entity 의 모든 필드에 대해 Setter 를 생성하고, 기본생성자를 public 으로 선언할 경우,개별 단위로 필드가 자유롭게 수정될 수 있기때문에다른 팀원, 혹
\`th:if="${ - 조건문으로 List 의 개수 (답변의 갯수) 가 0 보다 큰지 확인\`th:text="${ - List 의 개수가 0보다 크다면 (답변이 있다면) 표시
Spring 기반 App 의 인증과 권한을 담당하는 Spring 의 하위 framework 이다.인증 (Authenticate) - 로그인권한 (Authorize) - 인증된 사용자가 어떤 것을 할 수 있는지hymeleaf-extras-springsecurity6 는
BCryptPasswordEncoder 를 Bean 으로 등록해 Container 에 저장BCryptPasswordEncoder 는 PasswordEncoder 의 구현체이다.PasswordEncoder 를 DI 해 클라이언트가 입력한 Password 를 암호화 한다.
log-in 기능 추가지난번에 설정했던 접근 권한에 and() 로 기능을 추가해주면 된다.loginPage/user/login 로 오는 요청은 로그인 이라는 뜻여기서 말하는 요청 url 은 POST 를 뜻한다.defaultSuccessUrl로그인이 완료될 경우 반환되는
클라이언트의 로그인 여부와 로그인 했을경우 정보를 조회하는 방법목표Answer 를 작성하면 SiteUser 의 정보를 조회해 로그인 회원일경우 Answer 에 Username 을 표시하는 기능을 구현log-out 상태로 게시물 작성을 시도하면 log-in 페이지로 이동
권한이 있는 클라이언트에 한에 수정기능이 정상 작동됨권한이 있는 클라이언트만 수정 버튼이 활성화 되게 만들어야 한다.sec:authorize="isAuthenticated()”log-in 여부 확인th:if="${question.author != null and
권한이 있는 클라이언트에 한해 삭제 기능 정상 작동삭제는 수정과 달리 href 속성값을 javascript:void(0)로 설정했다.javascprit 를 호출하는 코드이다.삭제 버튼을 눌렀을 경우 “정말로 삭제하시겠습니까?” 와같은 확인 절차를 넣으려고 설정되었다.t
SiteUser클라이언트의 정볼를 저장QuestionUser 게시물의 정보를 저장AnswerQuestion 의 댓글을 저장좋아요 기능을 추가하기 위해서 SiteUser 의 참조를 하나 더 추가해야 한다.글쓴이와 답변자는 1:N , N:1 의 관계지만,좋아요는 N:N 의
클라이언트가 수정, 삭제 등을 요청할경우business 로직을 수행하고 redirect 로 응답하면 사실상 새로운 페이지가 랜더링 되는것이기 때문에클라이언트 입장에서 작업의 흐름이 끊기게 된다.앵커 태그를 사용하면 응답과 동시에 개발자가 원하는 위치로 스크롤을 이동시킬
gradle 의 dependencies 에 라이브러리를 추가해야 한다.참고로 start.spring.io 에서는 추가할 수 없다.spring boot가 관리하는 라이브러리가 아니기 때문에 버전 정보를 작성해주어야 한다.@Component 를 사용해 Bean 으로 등록일
🔗 개발자 센터 링크왼쪽 상단의 매뉴 → 네이버 로그인 → 네이버 로그인 API하단의 오픈 API 이용 신청을 누르면 application 생성 페이지로 이동된다.적당히 인증과 정보를 입력하다보면 환경추가 설정이 나온다.PC 웹을 추가서비스 URL배포되었으면 배포된
client id 와 pw 는 클라우드 콘솔 앱 생성시 획득할 수 있다.scope 는 google 로 부터 얻어올 수 있는 정보를 뜻한다.🔗 구글 클라우드 콘솔 링크상단에 표시한 박스를 누르면 프로젝트를 선택하거나, 개설할 수 있는 창이 팝업된다.새 프로젝트를 눌러
소셜 로그인에 관련된 라이브러리setting설명🔗 개발자 도구 링크내 어플리케이션 → 로그인 → 어플리케이션 추가 → 접속매뉴 → 카카오 로그인 → 활성화 설정 → 상태 on 으로 변경하단의 Redirect URL 등록application yml 에 등록했던 url
이 방법이 첫번째 방법보다 더 간단해서 적용해봤지만 이 방식은 아무때나 적용이 불기능하다.단방향 연관관계의 data 를 저장하거나, 조회하는 로직만 수행 가능하다.
지난번 객체를 생성할 때 연관관계에 있는 List 속성이 null 로 생성되는 문제를 해결한 후 발생한 문제이다.생성한 객체를 수정하면 특정 부분만 수정되는 것이 아닌 기존 객체에 수정한 객체가 덮어- 씌워지는 문제를 확인했다.문제를 해결하고 알게된 사실이지만Build
팀프로젝트 도중 Service 계층을 test 할 때 문제가 발생했다.내가 맡은 domain 은 게시글 이였는데 게시글을 생성하기 위해서는 회원 객체가 필요했다.test 하기위해 회원 객체 생성후 게시글 생성과 함께 회원쪽 게시글에 add 를 했더니 NEP 가 발생me
DefaultOAuth2UserService 를 상속받아 외부로부터 응답받은 값을 가공하고 처리한다.loadUser 는 작업을 하기위한 핵심 method 이다.이렇게 처리하면 로그인까지는 성공하지만,응답받은 data 가 여러개일경우 Json 을 String 으로 변환시
로그인과 관련된 로직은 Srping Security 가 전담하기 때문에 Controller 에서 직접 설정을 해줄 수 없다.즉 Security 계층에서 설정해주어야 하는데 Conroller 에서 다루는 방법과 다르기 때문에 별도로 포스팅 해봤다.먼저 로그인이 실패했을
Entity 를 구현하다보면 반복되는 필드값을 볼 수 있다.이러한 중복은 상위 객체를 생성해 상속하는 것으로 해결할 수 있다.Entity 를 상속시키기 위해선 abstract 객체로 생성해야 한다.@MappedSuperclassEntity 상속을 위해 선언 해줘야하는
옵저버 패턴을 사용한 Event 기능 구현하기변화가 발생할 때 구독자에게 이벤트를 보내주는 역할ApplicationEventPublisher이벤트 공급자 기능을 수행하기 위한 Spring boot 의 라이브러리 객체publishEvent구독자에게 이벤트를 발생을 알리기
HTTPS 를 사용하기 위해선 SSL 인증서를 발급받아야 한다.m1 , intellij , javaintellij 상단 file → Project Structure → SDKs → 사용중인 언어, 버전 선택JDK home path 에 표시된 경로로 이동하면 된다.나는
🔗 Meta for Developers 공식 홈페이지 ✏️ 앱 세팅 📍 앱 만들기 로그인 후 오른쪽 상단의 내앱 → 앱 만들기 → 소비자 → 앱 이름 추가 항목을 채우고 앱 만들기 📍 앱에 제품 추가 Facebook 로그인 설정 → 좌측 매뉴의 Faceb
🔗 페이스북 소셜로그인 구현하기🔗 Meta for Developers 공식 홈페이지제품 추가 → Instagram Basic Display → 페이지 하단의 새 앱 만들기 → 표시 이름 입력클라이언트 OAuth 설정유효한 OAuth 리다이렉션 URL콜백 승인 취소데
클라이언트가 특정 작업을 한 뒤,특정 시간동안 같은 작업을 하지 못하게 막기위한 기능이다.사용자 편의를 위해 다음 작업 가능시간까지 초단위로 보여줄 수 있는 기능도 구현하면 좋다.custom 을 사용해 원하는 금지 시간을 입력해준다.이렇게 구현하면 java 코드로 구현
🔗 Toss 개발자 센터🔗 spring boot 토스 페이먼츠 연동 샘플 공식 Git repository🔗 Spring boot 만 따로 분리한 Repository모바일에서 Toss 앱 가입개발자 센터에서 Toss 아이디로 로그인우측 상단에 내 개발자 정보 → A
Rest Controller 를 구현할 때 비즈니스 로직 수행 중 문제가 발생할 경우 이를 핸들링 하기 위한 기능이다.서버의 문제인지 클라이언트의 문제인지 원인을 클라이언트에게 응답할 수 있다.만약 예외처리를 하지 않는다면 모든 exception 이 500 에러로 발생
🔗 Collection🔗 MapMap 과 동일한 방식으로 작동되지만 하나의 Key 값에 복수의 Value 값이 입력될 수 있음MapKey 값의 중복이 불가능하다.하나의 Key 값에 하나의 value 만 저장할 수 있다.MultiValueMap하나의 Key 값에 복수
settings.gradle수정build.gradlegroup 수정java 하위 디렉토리명 변경프로젝트 폴더는 복사해서 기존 폴더를 지우는방법이 좋음application 실행 객체 명도 변경혹시 변경 안된것이 있다면 탐색으로 찾아서 변경test 하위 디렉토리도 같은 방
Cross Origin Resource Sharing 의 약자로 다른 출처의 자원을 공유하는 것 이라고 한다.Spring Cloud 에서는 아무런 설정을 하지 않으면 보안적인 이유로 다른 출처의 HTTP 요청을 제한한다고 한다SOP (Same Origin Policy)
transactional 은 기본적으로 중첩이 될경우 상위에 흡수되도록 설정되어있다.상황에 따라서 기본값을 수정하면 더 유동적으로 transactional 을 사용할 수 있다.기본값으로 트랜잭션이 없으면 새롭게 시작하고,있다면 기존 트랜잭션을 사용하는 옵션트랜잭션이 존
Spring 은 여러가지 기술들의 모음이라고 할 수 있고,그것을 Spring 생태계 라고 한다.Spring Framwork : Spring 의 핵심 기술Spring Boot : 모든 Spring 기술들을 편리하게 사용하게 하는 기술Spring Data : 다양한 DB
기본 세팅@AutoConfigureRestDocs 선언document() : 문서 작업 시작preprocessRequest, Response(prettyPrint()) : 요청, 응답 json 을 출력할 때 줄을 맞춰줌request body 가 있는 경우request
예를들어 인증, 인가와 같은 작업을 Controller 에서 하게되면 Controller 의 책임이 불필요하게 많아지고,비즈니스로직과 섞여 유지보수가 어려워지는 문제점이 발생한다.Intrerceptor 와 ArgumentResolver 를 사용해 요청이 API 에 라우
✏️ 발단 Kakao API 를 사용한 인증 로직을 구현하기위해 Kakao 서버로 요청을 보내던중 Kakao 서버의 요청값들이 스네이크 케이스를 사용하는 사실을 알게됬다. Kakao 서버는 파이썬을 사용하기 때문에 스네이크 케이스를 사용하는 것으로 보인다.
✏️ 발단 Kakao API 를 사용한 인증 로직을 구현하기위해 Kakao 서버로 요청을 보내던중 Kakao 서버의 요청값들이 스네이크 케이스를 사용하는 사실을 알게됬다. Kakao 서버는 파이썬을 사용하기 때문에 스네이크 케이스를 사용하는 것으로 보인다.
새로운 프로젝트를 시작해 최신 버전의 Spring boot 로 프로젝트를 세팅했다.이번에 세팅한 프로젝트는 3.2.1 버전이다.외부 api 에 요청을 편하게 보내기 위해 feign 을 적용하던중 Spring boot 버전과 Cloud 버전의 호환이 맞지않는 문제가 발생