본문 바로가기

Backend17

1. 프로젝트 생성(Kotlin Springboot) IntelliJ를 사용하고 있다는 전제 하에 글을 작성한다 1. File -> New -> Project 2. Project 정보들을 적어준다 Name: 알아서 Language: Kotlin Type: Gradle-Kotlin(개인취향) kotlin을 선택하면 .kts파일로 gradle이 관리된다 JDK: Spring 3.x.x이상부터는 최소 17을 사용해야 한다 Java: JDK와 동일하게 한다 Group은 개인 또는 회사의 앞에 붙는 패키지명을 입력해주면 된다 Packaging은 Jar를 추천한다 Kotlin은 Lombok을 쓸 필요가 없다. 이후에 설명할 것이다 Web, Spring Data MongoDB, Spring Data JPA, PostgreSQL Driver, Validation 만 추가.. 2023. 8. 22.
0. Kotlin Springboot3.x.x + Spring Data(Postgresql, MongoDB) + Security 최근에 코틀린 스프링으로 작업을 하면서 포스팅을 해보고 싶었다 기본적으로 2023년 8월 21일 기준으로 최신인 3.1.2 버전으로 만들 것이다 https://spring.io/blog/2023/07/20/spring-boot-3-1-2-available-now Spring Boot 3.1.2 available now spring.io 또한 Spring Data Jpa(Postgre), Spring Data MongoDB(MongoDB)를 커넥션으로 설정해서 요즘 많이 쓰이는 ORDB인 Postgresql과 NoSQL의 절대강자 MongoDB에서 간단 또는 복잡한 쿼리는 어떻게 처리하는지에 대해서 포스팅하려고 한다 중간중간 코틀린 문법을 활용해서 Null처리나 로직을 깔끔하게 가져가 볼 예정이다 마지막으.. 2023. 8. 22.
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.
백엔드 개발 시 테스트 코드가 있어야 하는 이유 아직까지도 테스트코드가 없는 회사들이 많다 여러 이유들을 들어보면 개발 속도가 느려진다, 실제 서비스개발을 하는 것이 아니다 등등을 이유로 댄다 난 주니어 개발자이다. 개인적으로 TDD를 하면 좋겠지만, TDD까지는 바라지 않는다 (TDD란 Test Driven Development이며 실패하는 테스트 코드를 만든 후 성공을 위한 코드를 만든다) 실제로 개발을 하면 개발자가 모든 입력값을 검증할 수 없다 프론트 단에서 null이 넘어올지 ''(empty string)이 넘어올지, undefined가 입력값으로 넘어올지 모르는 일이다 어느날 프론트 직원이 나한테 물어봤다. "이 입력 폼을 123에서 ''로 비워놔도 동작이 되나요?" MSA 프로젝트라서 그 모듈 api를 열어서 컨트롤러로 가고 입력값 DTO.. 2022. 5. 5.
스프링 시큐리티 + 소셜로그인 구현(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.