전체 글92 Spring Boot에서 Actuator 및 Spring Actuator Admin 설정 방법 Actuator은 애플리케이션 관련 데이터 및 모니더링 정보를 제공해준다. 단순히 Actuator만 사용한다면 JSON 형식 혹은 XML로 확인할 수 있다. 하지만 GUI로 보고 싶다면 Actuator 기반 UI인 Spring Boot Admin을 사용하면 된다. (오픈소스) 자세한 내용은 백기선님의 "우아한 스프링 부트"를 참고하길 바란다. www.youtube.com/watch?v=z0EaPjF3pCQ 서버 애플리케이션 우선 admin 전용 서버를 띄우기 위해 프로젝트를 생성해야 한다. 멀티모듈로 해도되지만 필자는 그냥 start.spring.io를 통해서 프로젝트를 하나 생성했다. 라이브러리로 Spring Boot Admin (Server)를 추가해준다. ※ 주의할점 이것 때문에 약간 헤맸는데, 클.. Tech/Spring 2021. 3. 21. 인텔리제이 단축키 응용 테스트 코드 디버깅 리펙토링 커스텀 단축키 설정하기 테스트코드 alt + enter 테스트 코드 - 클래스명 에서 단축키 이용해야됨 - ctrl + shift + T로 생성 가능 테스트 코드로 이동 ctrl + shift + T - 메소드명 위치에서 단축키 클릭하면 바로 이동 - 다시 한번 누르면 원래 클래스로 되돌아옴 선택된 테스트 실행 ctrl + shift + F10 - 실행시킬 테스트코드에 포커스를 맞춘다음 실행 정지 ctrl + F2 리팩토링 F6 클래스 이동 - 바꾸고 싶은 패키지로 변경 - 이렇게 하게 되면 해당 클래스를 import하고 있는 모든 위치가 바뀜 ctrl + shift + F6 변수의 타입 변경 - 기본타입으로 변경가능 - 메소드타입도 변경 가능 ctrl + F6 메소드의 시그.. IDE/Intellij 2021. 3. 17. 인텔리제이 단축키 정리 - 2 ※ 단어수정1 Ctrl + shift + alt + J 파일내 동일단어 한번에 수정 ※ 단어수정2 Shift(⇧) + F6 : 클래스, 변수, 파라미터 이름을 일괄적으로 변경해주는 단축키 입니다. ※ 단어수정3 Alt + J : 수정 원하는 단어 블럭 씌운뒤 클릭 Live template psvm : public static void main(String[] args){ } sout : System.out.println(); iter + enter : foreach문 자동 생성 itar + neter : for문 자동 생성 ctrl + J를 눌러서 라이브 템플릿에서 지원하는 기능들을 확인할 수 있음 public static void main(String[] args){ } sout : System.out.. IDE/Intellij 2021. 3. 15. Google 소셜 로그인 Google API 클라이언트 라이브러리 + GoogleIdTokenVerifier 사용하는 방법 Rest API 서버에서 OAuth2.0을 사용하여 소셜 로그인을 구현해야 했습니다. 프론트는 리액트를 사용했기에 SPA방식을 고려해야 했습니다. 보통 아래와 같은 흐름으로 구현이 됩니다. 그림상으로는 1~3번 까지는 SPA에서 처리한다음 4번에서 code와 redirect_url을 반환합니다. 현재 진행하는 프로젝트에서는 5번의 access_token과 id_token값까지 프론트에서 받은 다음, access_token을 백엔드 서버에 제공하여 소셜 정보를 받는 과정으로 변경하였습니다. 구글 소셜 로그인 API를 구현하는 방식은 아래 블로그에 잘 설명되어 있습니다. (accessToken 값을 제공받는 과정까지 있습니다.) antdev.tistory.com/68 [Google Login API] Goo.. Tech/Spring 2021. 3. 15. Spring Boot Validation 순서 정하기 & 테스트 코드 프론트에서 유효성 검사를 수행하지만, 백단에서도 유효성 검사를 수행해야 안전한 애플리케이션을 만들 수 있습니다. Spring Boot의 Validation은 가장 많이 쓰이는 유효성 검사 라이브러리 입니다. 적용하는 방법은 구글링하면 수많은 포스팅이 존재하니 생략하고 바로 이슈 및 해결을 설명드리겠습니다. public class UrlDto { public static class Request{ @Data @Builder @NoArgsConstructor @AllArgsConstructor public static class Save{ @NotBlank(message = "Link 필드는 필수입니다.") @Pattern(regexp="^((http(s?))\\:\\/\\/)([0-9a-zA-Z\\-]+\.. Tech/Spring 2021. 3. 15. early return이란? github.com/woowacourse/java-racingcar-precourse woowacourse/java-racingcar-precourse 자동차 경주 게임 미션을 위한 저장소. Contribute to woowacourse/java-racingcar-precourse development by creating an account on GitHub. github.com 우테코 프리코스의 미션은 요구사항에 맞춘 코드를 작성해야 합니다. 그 중 하나는 다음과 같습니다. else를 왜 쓰지 말라는 것일까요? if-else문이 너무 많으면 읽기가 매우 어려울뿐더러, 조건에 대해 명시적이지 않습니다. 따라서, 함수 내에서(if문) return을 함으로서, 뒤의 코드로 진입하지 않아 else문을 사용할.. Language/Java 2021. 3. 13. 인텔리제이 단축키 정리 - 1 기본1 Alt + 1 프로젝트 창 포커스 한번 더 누르면 프로젝트 창이 사라지고 에디터 창에 포커스가 맞춰짐 esc 프로젝트창 -> 에디터 창으로 돌아오기 space 프로젝트 창 미리보기 프로젝트 창에 포커스가 간 상태에서 space 클릭 ctrl+shift+f12 에디터 창 키우기 - gradle창, 프로젝트 창이 다 축소됨 - 다시 누르면 켜놓은 창이 다시 활성화 ctrl+tab 에디터 창 이동 - 에디터에서 켜놓은 창들 중에서 원하는 창 이동하고싶을때 - ctrl키를 계속 누른상태서 tab을 누르면 항목이동 새파일 생성 에디터에서 : ctrl+alt+insert : smemo랑 겹처서 나는 안됨; 프로젝트 창에서 : alt + insert 커서이동 단어별 이동 : ctrl + 왼쪽, 오른쪽 방향키 .. IDE/Intellij 2021. 3. 11. [자바 스터디 15주차 번외] 스트림 & Optional Stream 소개 데이터를 담고 있는 저장소(컬렉션)이 아니다. Functional in nature, 스트림이 처리하는 데이터 소스를 변경하지 않는다. Functional 하다. 결과가 또 다른 stream이 되는 것이지, 전달받은 데이터 자체가 변경되는 것이 아니다. 스트림으로 처리하는 데이터는 오직 한번만 처리한다. 컨베이어 벨트에 항목이 한번 지나가는 것이라고 보면된다.(한번 지나면 끝) 무제한일 수도 있다. (Short Circuit 메소드를 사용해서 제한할 수 있다.) 중개 오퍼레이션은 근본적으로 lazy 하다. stream에 사용하는 것은 2개로 나눌 수 있다. (중개, 종료) 중개 오퍼레이션은 lazy : lazy하다는 말은 종료 오퍼레이션이 나오기 전까지는 실행하지 않는 것을 뜻한다. 즉.. Language/Java 2021. 3. 7. [자바 스터디 15주차] 람다식 목표 자바의 람다식에 대해 학습하세요. 학습할 것 람다식 사용법 함수형 인터페이스 Variable, Capture 메소드, 생성자 레퍼런스 람다식이란? 람다식은 메소드를 하나의 '식(expression)'으로 표현한 것이다. int[] arr = new int[5]; Arrays.setAll(arr, i -> (int)(Math.random() * 5) + 1); 위의 문장에서 '() -> (int)(Math.random() * 5) + 1'이 바로 람다식이다. 메소드를 람다식으로 표현하면 메소드의 이름과 반환값이 없으므로, 람다식을 '익명 함수(anonymous function)'이라고도 한다. 위 람다식이 하는 일을 메서드로 표현하면 다음과 같다. int method(){ return (int)(Ma.. Language/Java 2021. 3. 5. SpringBoot에서 HttpOnly 쿠키방식을 이용한 refreshToken 발급 jwt의 access_token과 refresh_token를 구현하는 과정에서 프로젝트 프론트 팀원분이 refresh_token은 쿠키에 담아서 전송해달라는 요청이 들어왔다. 과정은 대략 아래와 같다. 전송방식은 Http Only 방식으로 쿠키에 담아 전송하였다. httpOnly란 Set-Cookie HTTP reponse 헤더에 포함되는 flagf이다. cookie를 생성할 때 HttpOnly를 사용하는 것은 브라우저가 HttpOnly를 지원할 경우 쿠키는 클라이언트 측 스크립트에 접근할 수 없다. 악성 스크립트(XSS 공격)에 의한 위험을 완화시켜준다. 즉, http only 쿠키 방식으로 저장된 정보는 Javscript의 Document.cookieAPI로 접근이 불가능하다. 따라서 XSS 취약점 .. Tech/Spring 2021. 2. 27. [자바 스터디 14주차] 제네릭 목표 자바의 제네릭에 대해 학습하세요. 학습할 것 제네릭 사용법 제네릭 주요 개념(바운디드 타입, 와일드 카드) 제네릭 메소드 만들기 Erasure 제네릭이란? 데이터타입을 일반화하는것을 의미한다. 제네릭은 클래스나 메소드에서 사용할 내부 데이터 타입을 컴파일 시에 미리 지정하는 방법이다. 이렇게 컴파일 시 type check를 하면 장점이 있다. 클래스나 메소드 내부에서 사용되는 객체의 타입의 안정성을 높일 수 있다. 반환값에 대한 타입 변환 및 타입 검사에 들어가는 노력을 줄일 수 있다. Java 5 이전에서는 여러 타입을 사용하는 대부분의 클래스나 메소드에서 인수나 반환값으로 Object타입을 사용했었다. 하지만 이 경우에는 반환된 Object 객체를 다시 원하는 타입으로 타입을 변환해야 하고, 이.. Language/Java 2021. 2. 27. [자바 스터디 13주차] IO 목표 자바의 Input과 Ontput에 대해 학습하세요. 학습할 것 스트림 (Stream) / 버퍼 (Buffer) / 채널 (Channel) 기반의 I/O InputStream과 OutputStream Byte와 Character 스트림 표준 스트림 (System.in, System.out, System.err) 파일 읽고 쓰기 I/O 입출력 입출력이란? 입출력은 컴퓨터 내부 또는 외부 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 키보드로부터 글자를 입력 받는다 -> 입력 System.out.println()을 이용해 화면에 출력한다 -> 출력 스트림(stream) 자바에서 어느 한 쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 역할을 수행한다. 스트림이.. Language/Java 2021. 2. 20. 이전 1 ··· 3 4 5 6 7 8 다음