본문 바로가기

Backend/Java - Spring14

Slack 채널에 메세지 보내기 2023년 (Spring, Js) 1. 슬랙에 가서 자신만의 워크스페이스를 만든다 2. 메세지를 보내고 싶은 채널을 만든다(optional) - 기본 채널로 써도 됨 난 로그인을 하면 로그인한 사용자의 간단한 정보를 슬랙으로 보내고 싶기때문에 채널 이름을 auth로 설정함 사용자 추가는 건너뛰기를 하였다 3. 채널 이름(# 채널이름)에서 아래를 가리키는 화살표 토글 버튼을 누른다 4. 통합 탭으로 눌러서 앱 -> 앱 추가를 누른다 5. 수신 웹훅(Incoming WebHooks)를 추가한다(보기->슬랙에 추가) [ 웹으로 열린다 ] 6. 전송 보낼 채널을 선택한다 7. 웹후크 URL을 복사한다 아래에 메세지전송, 링크추가, 사용자 지정 아이콘, 채널 재정의, curl 요청 등 어떻게 보내는지에 대해 자세히 적혀있다 8. 알림 올 이름을 .. 2023. 1. 8.
협업을 위한 DTO Response Custom 뭐 기본적으로 Entity가 아닌 DTO를 Response로 내려보내야 하는 것은 다들 알 것이다 우리 회사의 Entity Spec을 외부에 노출하지 않으며, Setter가 열린 채로 Entity를 내려보내고, 아직 메모리에 올라와 있는 채로 어딘가에서 누군가가 수정을 하고, 업데이트나 머지가 일어난다면(영속성인 객체상태에서) 끔찍한 일이 아닐 수 없다 static으로 내부클래스로 구현할지 말지는 본인 선택이다. 깔끔해진다는 장점이 있으나 OuterClass.InnerClass이렇게 인자나 반환값이 바뀌게 되어 오히려 이게 안예쁘게 보일 수 있다 프로젝트 브라우저 내에서 이쁘게 보일것이냐 => static(inner) 코드 레벨에서(함수 인자나 반환값으로 쓸 때) 참조를 깊게 안할것이냐 => non st.. 2022. 10. 23.
jar Build Task(Feat. thin/plain, fat/uber) + no main manifest attribute in ... 우선 프로젝트를 만들때 Spring initializer로 만들면 IDE가 배포 패키징(아카이빙)을 WAR로 할지, JAR로 할지 선택하라고 한다 그리고 의존성 관리는 Maven(Pom.xml)로 할건지, Gradle(build.gradle-Groovy)로 할건지도 선택하게 된다 일단 이 글에서는 Maven/Gradle, War/Jar의 차이보다는 전반적인 패키징에 대한 것, 그리고 plain-jar, not plain-jar가 무엇인지에 대해서 포스팅해보려고 한다 일단 나 그리고 우리 회사는 로컬에서 빌드 후 파일통신으로 jar를 올려서 돌리기때문에 서버에서 터미널로 빌드를 하지는 않는다 그리고 로컬에서 빌드할때는 빌드 Task의 build를 이용하기보단 bootJar를 이용한다(IntelliJ) 이제.. 2022. 9. 4.
DTO 돌려막기 멈춰!(feat. jackson annotation) 짧게 글을 써보겠다 글 제목처럼 가끔 예전에 만들어졌던 DTO를 활용하는 경우가 있다 이럴때 사용할 수 있는 어노테이션이 있다! @JsonIgnoreProperties({"xxx", "yyy"}} private UserRes user; @JsonIgnoreProperties({"xxx", "yyy"}} private UserRes user; user 안에 xxx와 yyy는 json response 필드에 포함하지 않는다는 어노테이션이다 매우 유용하게 활용할 수 있다..! 애초에 null인지 아닌지까지 보여주고싶지 않은 필드에 사용할 수 있다 추가로 리스트의 정보는 ToString을 할때 위험한 부분이 있다. exclude 어노테이션을 잘 사용해서 로그를출력할때나 값을 가져올때 순환참조를 피해야 한다 @T.. 2022. 5. 30.
스프링 시큐리티 + 소셜로그인 구현(2) - 테스트해보기 일단 New Project에서 Spring Initializer로 시작하겠다 대충 Gradle로 만들고 DB는 일단 나중에 붙여도 되므로 Lombok, Spring Web, Thymleaf, Spring Security, OAuth2 Client를 선택해주고 Finish를 눌러준다 File에 Preferences를 선택해서 Build - Build Tools - Gradle에서 저기 두 부분을 IntelliJ IDEA로 변경해준다 캐싱하고 뭐시기 등등 느리다고 알려져서 인텔리제이로 바꾸는게 빠르다고 한다 또한 롬복 플러그인을 설치 안하신분이 있다면 설치를 하자 추가로 어노테이션 처리 활성화도 해준다 File - Preferences - Compiler - Annotation Processors appli.. 2022. 4. 21.
스프링 시큐리티 + 소셜로그인 구현(1) - 앱 등록하고 키값 얻기 1. Google https://console.cloud.google.com/ 에 접속을 한다 위의 점 3개가 있는 화살표 부분을 클릭한다 새 프로젝트를 클릭한다 프로젝트 이름을 아무거나 짓고 만들기를 누른다 이 화면에서 왼쪽 막대기 3개를 누르고 API 및 서비스를 눌러준다 추가로 옆에 고정까지 해주면 좋다 API 및 서비스 화면으로 들어왔다. 왼쪽의 OAuth 동의 화면을 누르자 동의 화면에서 외부를 선택 후 만들기를 누른다 앱 등록 화면에서 필수값인 앱 이름, 사용자 지원 이메일, 개발자 연락처 정보를 입력하고 다음으로 넘어간다 여기에서는 승인된 도메인이 없어도 상관없다(테스트용 애플리케이션이기 때문, 실제 서비스에서는 필요) 범위에서 유저에게 받을 데이터를 정하는 것이다 범위 추가 또는 삭제를 눌.. 2022. 4. 18.
스프링 시큐리티 + 소셜로그인 구현(0) - 기본 정보 알기 Google, Facebook, Github, Kakao, Naver 전부 다 보여주겠다!! 내가 삽질해가며 얻은 결과들... 22년 중반의 글이다. 옛날 19 20년 글보고 베끼지 않았으니 안심해주세욧! 일단 시큐리티는 기본적으로 붙어있고, 게이트웨이를 쓰거나 모놀리식이라면 WebSecurityConfig에서 요청마다 인증을 필요/미필요하게 할건지 설정하는건 알거라 생각하므로... 넘어간다 스프링 시큐리티란? 인증, 인가를 기반으로 한 스프링 하위 프레임워크이다 인증(Authentication)은 간단히 말하면 로그인 인가(Authorization)는 간단히 말하면 내가 유저인데 어드민 권한으로 다른 사람의 계정 정보를 보거나 유저를 삭제할 수 없듯, 권한을 의미한다 OAuth(Open Authoriz.. 2022. 4. 14.
Blocking/Non-Blocking & Sync/Async가 뭔데? 흔히들 글이나 그림으로 설명을 하기만 한다. 나는 그런 것보다 직접 눈으로 봐야 직성이 풀린다(기능 작성 or 테스트 코드) 자 그럼 WebClient와 함께 테스트를 해보겠다 Spring은 기본적으로 Blocking/Sync 방식으로 동작을 하고 Node.js가 Non-blocking/Async 방식으로 동작을 한다 비동기 방식은 순차처리를 지원하지않는다 순서가 중요한 처리는 동기방식으로 처리를 해야한다(또한 잠금이 필요한 경우) 비동기관련용어 - ajax, XMLHttpRequest, Callback, Promise... Blocking / Non-blocking 은 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐 안주느냐, Sync / Async 는 호출된 함수의 종료를 호출한 함수가 처리하느냐.. 2022. 3. 23.
Java/SpringBoot 메일을 보내는 방법들 Google SMTP 사용 추가로 공부하세요~! 안타깝지만 제 블로그 글이 아님..ㅎ - SMTP, POP3, IMAP 차이 https://m.blog.naver.com/ijoos/221742035684 SMTP, POP3, IMAP 차이 이번에는 SMTP, POP3, IMAP의 차이에 대해서 배워보고자 한다. SMTP SMTP는 Simple M... blog.naver.com - SSL, TSL 차이 https://ko.gadget-info.com/difference-between-ssl SSL과 TLS의 차이점 SSL과 TLS 간에는 약간의 차이점이 있습니다. SSL은 목적을 달성하기위한 가장 중요한 접근 방법이며 모든 브라우저에서 지원됩니다. TLS는 보안 및 개인 정보 보호 기능이 강화 된 후속 .. 2022. 3. 23.
DTO instantiate (feat. Lombok, GET/POST) 여러분들은 아마 DTO에 값이 어떻게 채워져서 컨트롤러 메서드 내부의 인스턴스화된 오브젝트로 넘어오는지 궁금하지않나요? 제가 완벽히는 아니더라도 아는만큼 써놓겠습니다 오브젝트(객체)가 메모리에 올라와서 접근 가능하고, 처리 가능하게 되는 것을 인스턴스화된 객체, 인스턴스라고 합니다. 그럼 DTO는 언제 인스턴스화가 될까요? 기본적으로 Get 방식과 Post 방식은 스프링에서 처리 방식이 다릅니다 (이 밑부터는 반..말체 ㅎ) 1. Get Request + DTO Get요청에서의 DTO들은 모두 다 QueryString으로 들어간다 QueryString이란 ?{Key}={Value}&[Key}={Value} 방식으로 들어간다는 것이다 어차피 스프링에서 DTO로 만들어도 포스트맨 등에서는 Query Para.. 2022. 3. 10.
Springboot local 환경에서 https 적용하기 라 말하고 사실 CA에서 인증받지 않은 짜가 인증서로...ㅎ 보통은 간단하게 하면 배포 전에 직접 인스턴스 서버에 들어가서 let's encrypt을 쓰던가 zeroSSL등 다른곳을 이용해서 인증서를 받을것이다 나는 keytool을 이용할것이다 자바폴더에 있기 때문에 윈도우는 bin 폴더에 환경 변수설정만, 맥은 기본적으로 잡혀있거나 아니면 .bashrc에다 추가해주면 된다 $> keytool -genkey -alias spring -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 4000 이름과 성을 입력하십시오. [Boki]: Boki 조직 단위 이름을 입력하십시오. [Boki]: Boki 조직 이름을 입력하십시오.. 2022. 3. 3.
Springboot Security SpEL 을 활용한 @PreAuthorize SpEL(Spring Expression Language)란? Spring expression language는 보통 SpEL로 표기하며 구두로는 스프링 EL이라고 지칭한다 인증은 각각 서비스에서 정해지는 방법이 있을것이고 filter나 interceptor에서 거를 거라고 생각하고 api호출시의 권한체크, @PreAuhorize의 여러 방법들에 대해서 알아보려고 한다 0. 인증이 필요하지 않을 경우 @PreAuthorize("isAnonymous()") 익명이라는 뜻이다. 이 경우 인증을 거치지 않더라도 동작한다 @PreAuthorize("isAnonymous()") @GetMapping("/test0") public String test0() { return "test0"; } 1. 인증이 필요할 경.. 2022. 2. 26.
AOP/(Rest)ControllerAdvice Log를 꾸며보자(feat. NPE 관리) 클릭하면 큰 화면으로 볼 수 있습니다 맨 위 쿼리는 P6Spy를 이용해서 보여진 쿼리다. 저거 아니면 log4jdbc를 이용해서 볼 수도 있다. 저건 의존성 추가하고 Config 설정만 몇개 해주면 되서 패스하겠다. 밑에 보면 AOP(Aspect)에서 컨트롤러, 서비스단에서의 정보들을 로깅하고있는 것을 볼 수 있다. 애초에 내가 맥북을 쓰기때문에 다른 로그들도 [날짜] [LEVEL] [숫자] - 정보로 색이 입혀져서 뽑히는데 원래는 하얀색만 나온다는 것을 명심하자~~!^-^ 저렇게 이뿌게 로그를 찍을라면 그냥 컬러를 주면서, 맞는 포인트컷, Around 설정과 jointPoint에서 정보를 가져오는정도만 코드를 작성해주면 된다. 추가로 커스텀예외에서 런타임으로 태워서 받는 Advice에서도 적용을 해 줄.. 2022. 2. 26.
IntelliJ에서 Spring 프로젝트(Spring MVC. Not Spring boot) 생성하기 요즘은 Spring Boot로 바로 개발한다.하지만 Spring을 제대로 알려면 Servlet부터 Spring, Spring Boot 순서로 배워야 잘 배운거라 생각한다!옛날 포스팅된 글들 혹은 이클립스, STS로 스프링프로젝트를 만드는 글들은 많으니IntelliJ로 Spring 프로젝트를 만드는 방법을 포스팅해볼까 한다~~![ IntelliJ Version 2021.1.2 Ultimate Version ] 으로 작성됨1. File -> 새 프로젝트에서 Maven을 선택하고 SDK버전을 선택하고(본인은 1.8 = 8), archetype은 체크하지 않고 다음으로 넘어간다2.프로젝트명을 적어주고 완료를 누른다GroupId, ArtifactId, Version은 여기서 생략했다.GroupId는 작성하는 것을.. 2021. 6. 29.