SpringBoot + QueryDSL 적용 살펴보기
·
Project
QueryDslConfig.javapackage com.lettrip.lettripbackend.configuration;import com.querydsl.jpa.impl.JPAQueryFactory;import jakarta.persistence.EntityManager;import jakarta.persistence.PersistenceContext;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;@Configurationpublic class QueryDslConfig { @PersistenceContext private EntityMan..
[BAW] Express + PostgreSQL 트랜잭션 처리 도입기
·
Project
* 현재 ORM 도입 없이 PostgreSQL 드라이버인 pg를 사용하여 데이터베이스와 연결하고 있습니다. 기존 코드  기존 CommentService의 코드입니다. commentId를 받아와서 댓글 하나를 삭제합니다.이 로직 한 번에 총 4번의 DB 쿼리가 날아가게 됩니다. 1. commentId로 comment를 찾아옵니다.2. 해당 comment의 부모 댓글을 찾아 recomment_count를 1 감소시킵니다.3. 해당 comment가 달린 article을 찾아 comment_count를 1 감소시킵니다.4. 만일 대댓글이 달린 댓글이라면 해당 댓글에 deleted를 마킹하고, 그렇지 않다면 해당 댓글을 테이블에서 바로 삭제합니다. 현재 트랜잭션 처리가 되어있지 않아 2~4번 과정에서 에러가 발생..
[BAW] 중간점검 .. 프로젝트 모듈 구조화
·
Project
문제 상황현재 redux 모듈 디렉토리 구조입니다. 일단 보자마자 article 안에 왜 articles과 editor가 또 있는거지?..  싶고요 ㅎㅎ그리고 domain별로 디렉토리가 나누어져있지만 auth, user 디렉토리 안에는 ducks 패턴으로 작성된 파일이 있고, 나머지는 Type, Action, Reducer, Saga 파일이 전부 나누어져있는 짬뽕 구조입니다. (해맑게 웃는다)  이 외에도 파일 구조 상 정형화 되지 않은 부분들이 많아서 이를 좀 정리 해볼까 합니다.정리 좀 해볼까요 ..1. Redux 상태 사용, 기능별로? 데이터별로?현재 프로젝트에서는 글을 조회하여서 article 데이터를 받아오는 로직이 서로 다른 기능에서 중복 되고 있는 상황입니다. 즉, 같은 데이터 구조의 데이터..
[Node.js] dotenv.config(); 실행 전 다른 파일이 먼저 읽히는 문제
·
Project/트러블 슈팅
문제 상황Node.js(+express)에 AWS S3를 연결하면서 .env 파일에 다음과 같이 환경변수를 추가하였다. # AWS S3AWS_ACCESS_KEY=비밀AWS_ACCESS_SECRET_KEY=비밀AWS_REGION=ap-northeast-2AWS_S3_BUCKET_NAME=비밀 그리고 이 환경변수를 s3 configuration 파일에서 읽어와야 하는데, 제대로 읽어오지 못 해서 계속해서 undefined로 값이 들어가는 상황이 발생하였다. 문제의 파일 's3Client.js'import { S3Client } from '@aws-sdk/client-s3';const s3 = () => new S3Client({ region: process.env.AWS_REGION, credential..
[Express + React] OAuth2 로그인 구현 : Kakao 로그인에 닉네임이 반드시 필요하다면?
·
Project
배경프로젝트를 진행하면서 OAuth2를 사용하여 소셜 로그인(Naver, Kakao, Google)을 구현하게 되었다.이전 졸업 작품 등에서도 OAuth2로 소셜 로그인을 구현한 경험은 있지만, 전부 Java/Springboot를 이용하여 구현하여서 Express를 사용하여 구현한 것은 처음이었다!그치만 Springboot에서 Express로의 변경에 의해 야기된 큰 차이점은 없었다. 단, 이번에 OAuth2 로그인을 구현하면서 고려해야할 점은 다음과 같았다.닉네임(nickname) 정보가 반드시 필요하다.닉네임이 unique값이어야 한다. (즉, 겹치면 안 된다.)그런데, 다음과 같은 문제가 있었다.Provider로부터 얻어온 정보에 닉네임 정보가 없는 경우가 존재한다.얻어온 닉네임의 unique함이 ..
개발 환경 setting
·
Project/MVC project
Java 기존에 설치되어 있던 java version 11을 그대로 사용한다. Tomcat https://tomcat.apache.org/tomcat-9.0-doc/index.html Apache Tomcat 9 (9.0.70) - Documentation Index This is the top-level entry point of the documentation bundle for the Apache Tomcat Servlet/JSP container. Apache Tomcat version 9.0 implements the Servlet 4.0 and JavaServer Pages 2.3 specifications from the Java Community Process, and includes ma..
[FBTB] 4. 로그인 유지 기능 구현 (UI)
·
Project/FromBookToBook
웹 전체적인 UI도 좀 더 웹페이지 같게 바꾸었다. 여전히 아직 뭔가 수상한 웹처럼 보이지만 그래도 그 전보다는 나아진 것 같다. 로그인 완료시 헤더에 로그인 중인 사용자의 이름이 뜬다. 계정을 선택해서 성공적으로 로그인 되면 다시 이전 화면으로 돌아온다. 로그인 된 경우 local storage를 살펴보면 access token과 로그인 중인 사용자의 email, name 등이 들어가있는 것을 확인할 수 있다. 아직 하나도 안 꾸몄다 ㅋ 이렇게 로그인 유지 기능 구현 끝 ~~~~
[FBTB] 4. 로그인 유지 기능 구현 (OAuth2/JWT 관련 API)
·
Project/FromBookToBook
관련 도메인 OAuth2UserInfo package com.frombooktobook.frombooktobookbackend.security.user; import java.util.Map; public abstract class OAuth2UserInfo { // 키-값 쌍의 일반 Map에서 사용자의 필수 세부 사항을 가져오는데 사용 protected Map attributes; public OAuth2UserInfo(Map attributes) { this.attributes = attributes; } public Map getAttributes() { return attributes; } public abstract String getId(); public abstract String getEm..
[FBTB] 4. 로그인 유지 기능 구현 [1]
·
Project/FromBookToBook
드디어 로그인 유지 기능 구현 ! 이 부분에서 정말 많은 시간을 보냈다. 헤매기도 많이 헤매고 조금 힘들었지만 그만큼 다 해냈을 때 성취감은 말로 이룰 수 없었다. 일단 이전 로그인 구현은 react-google-login이라는 라이브러리를 사용해서 프론트단에서 access-token을 바로 얻게되었다. 하지만 이전 포스팅에도 적어놨듯이 이게 여간 찝찝한게 아니었다 .. 구현은 되긴 하는데 (비록 이메일과 이름만 받아오는거긴 하지만) 보안상으로도 엄청난 실수를 하는 느낌. (그치만 이 라이브러리가 존재하는 이상 어떻게 어떻게 안전하게 구현할 수 있는 방법이 있을 것 같기는 하다.) 그래서 google server에서 authorization code를 받은 뒤 백엔드 서버에 보내고, 백엔드단에서 goog..
(임시) user/password springSecurity 클래스들
·
Project/FromBookToBook
auth.jwt package com.frombooktobook.frombooktobookbackend.auth.jwt; import lombok.RequiredArgsConstructor; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import javax.servlet.FilterChain; import javax.servlet.Se..
[FBTB] 3. 로그인 기능 구현 (with Oauth2)
·
Project/FromBookToBook
이제 로그인 기능 구현이다. 생전 처음 들어보는 oauth2 를 사용하느라 여기저기 블로그도 많이 돌아다니고 유튜브도 많이 들락날락거렸다. ( 인증-인가에서부터 시작해서 oauth의 역할, session, cookie, jwt 기본 개념 공부도 자연스럽게 하게 되었다. ) 책에서 spring boot로 oauth2 google api를 통해 로그인을 구현하는 예제를 봐서, 이걸 토대로 열심히 코드를 짜다가 . . . 난관에 부딪혔다. 책에서는 view를 mustache로 구현하는데, 지금 나는 프로젝트에서 react라는 다른 프레임워크를 통해 view를 구현하고 있기 때문이었다. 처음에는 뭐 큰 차이가 있겠나 싶었다. 지금 내가 현재 구현한 back oauth 방식 + 뷰는 react로 짜는 법을 열심히..
[FBTB] 2. 독후감 목록 기능 구현
·
Project/FromBookToBook
목록 보여주는 기능은 그래도 좀 수월하게 짰다. 오류가 별로 안 나서 (나더라도 이해할 수 있는 오류) 오류 때문에 지체되는 시간이 적었다. UI는 역시 아주 대충 짰다 아무래도 나 미적 감각 없는 듯 대충 어떻게 어떻게 만들고싶다는 생각은 있지만 아직은 기능부터 구현하는게 먼저인 것 같아서 일단 미뤄둔다. 아직 페이지네이션도 구현 안 했고 진짜 기본적인 것만 짰다. (그래서 수월하게 짰던 듯 ㅎ) 이제 페이지네이션 구현하고, 웹사이트처럼 보이도록 header도 달고 뒤로가기도 추가하고 해야겠다. 더보기 구현 코드 Backend - PostListResponseDto package com.frombooktobook.frombooktobookbackend.controller.post; import com...