본문 바로가기

전체 글105

이제 어엿한 취준생이 되었구나...! : 2023년 6~10월 회고 들어가며 마지막 회고글이 6월 들어갈 때 즈음이었으니 딱 5개월만입니다. 간만에 새벽까지 테스트코드를 짜다가 갑자기 취준 생활에 대한 기록을 하고싶어져 이렇게 회고 글을 작성하기 시작합니다. 너무 오랫동안 '글'을 쓰지 않았어서 생각 좀 글로 옮겨보고 싶기도 하고요. 근 5개월동안 정말 많은 것이 있었다고 생각했는데, 요약하고보면 별로 없는 것 같기도합니다. 5개월간 한 것 6월 : secondhand 프로젝트 시작, 코드스쿼드 수료 7월 : DB 스터디 사작, JPA 스터디 시작, 데이터 크롤링 파트타임 시작 8월 : 데이터 크롤링 파트타임 종료, 원티드 프리온보딩 백엔드 인턴십(6주) 진행 9월 : 데이터 라벨링을 위한 API 개발, DB 스터디 종료, JPA 스터디 종료 10월 : 본격적인 취준 기.. 2023. 11. 3.
🔐 비밀번호 암호화해보자 (Feat: Spring) 해당 글에서 구현 언급한 코드는 practice-member-api 에서 확인 가능합니다. 시작하며 초반 연습용 프로젝트에서 회원가입을 구현하며 그냥 일반 텍스트로 회원 비밀번호를 관리해왔습니다. 하지만 보안상 비밀번호를 이렇게 평문으로 저장하는 일은 반드시 지양되어야 합니다. 마침 회원가입과 Jwt 토큰을 사용하는 인증/인가는 매우 자주 쓰는 로직이라 나만의 라이브러리를 만들고 싶었는데요. 원티드 프리온보딩 백엔드 미션이 딱 기본 회원가입 + jwt 토큰 방식의 인증인가 + 게시판 REST API라서 이참에 이 비밀번호 암호화를 구현해보기로 했습니다💪 Spring Framework 는 Spring Security 라는 하위 프레임워크에서 이러한 보안 인증인가 를 편리하게 제공해주고 있지만 해당 암호화 .. 2023. 10. 29.
DockerDesktop 탈출 : `Docker.raw`삭제, OrbStack 발생 상황 M1 256GB 사용중에 특별히 큰 파일이나 응용프로그램이 없음에도 시스템 용량이 매우 크다는 것을 발견했습니다. 소프트웨어 업데이트를 하기 위해서는 용량 확보가 반드시 필요했습니다. 대용량파일과 시스템 파일을 뒤지다가 발견한 `Docker.raw` 이 굉장히 용량이 크다는 것을 발견하였습니다. 발생 원인 `Docker.raw` 파일은 Docker Desktop 애플리케이션을 사용하기 위한 파일입니다. 컨테이너 이미지, 볼륨 데이터 및 컨테이너 런타임과 관련된 모든 데이터를 저장합니다. 만약 Docker Desktop을 사용중이라면 해당 파일을 수정하거나삭제하는 것은 애플리케이션 이용에 지장을 줄 수 있습니다. 직접적인 조작보다는 Docker Desktop을 이용하여 조작하는 것을 추천합니다... 2023. 10. 27.
안 읽은 채팅 구현기 : STOMP의 ChannelInterceptor 를 사용하여 이 글은 당근마켓을 모티브로 한 프로젝트 Secondhand 구현시 이슈 사항을 정리한 글입니다. 들어가며 Secondhand 프로젝트를 진행할 때 가장 마지막에 구현했던 기능인 ‘아직 안 읽은 채팅’에 대해 백엔드 개발자 2명이 한 고민과 구현 과정을 정리해보았습니다. 채팅 시스템은 처음 이 프로젝트를 시작할 당시에 BE는 물론 FE, iOS에게도 굉장히 큰 과제였습니다. 유저간 실시간 채팅을 어떻게 구현할 것이며, 어떻게 DB에 저장할 것인가도 어려운 미션이었는데요. (이것에 대해서는 추후에 따로 글을 적어보기로…) 산넘어 산… “안 읽은 채팅을 어떻게 구현할 것인가”는 다른 의미로 어려웠던 미션이었습니다. 전자는 “새로운 기술을 어떻게 도입할 것인가”라는 고민에 가까웠다면 후자는 채팅 도메인에 대한.. 2023. 10. 16.
PostgreSQL에서 Full text search 사용하고 싶다면? pg_bigm 모듈 연관글 MySQL 검색 기능 개선하기 : Full-text search 들어가며 최근 영상에 데이터 라벨링을 하기 위한 REST API와 WAS를 구축하고 있습니다. 이전에 여러번 진행했던 토이 프로젝트들과는 다르게 서비스를 구축하다보니 기술 스택 설정부터 모호한 서비스 요구사항 등등.. 이런저런 새로운 도전들을 하게되었습니다. 가장 새로운 도전 중 하나는 그동안 제 2의 고향과 같았던 🥹 MySQL을 떠나 다른 RDB를 사용하게 된 것인데요. 같은 RDB라 크게 달라질 것이 없다고 생각했지만.. 역시 세상에는 거저 지나가는 것들이 없었습니다. 💡 여담으로 제대로 PostgreSQL의 장점을 사용해보지 못한 상태에서, MySQL과 PostgreSQL의 가장 큰 차이점으로 느끼는 것은 auto_increm.. 2023. 10. 2.
Error: Springboot ArgumentResolver를 거치지 않는 예외 발생 상황 관리자 권한 검증을 위한 어노테이션과 ArgumentResolver를 구현했음에도 예외가 발생하였습니다. org.springframework.dao.InvalidDataAccessApiUsageException: The given id must not be null at org.springframework.orm.jpa.EntityManagerFactoryUtils.convertJpaAccessExceptionIfPossible(EntityManagerFactoryUtils.java:371) ~[spring-orm-6.0.11.jar:6.0.11] at org.springframework.orm.jpa.vendor.HibernateJpaDialect.translateExceptionIfPoss.. 2023. 9. 25.
Error: Springboot 3.0이상에서 QueryDSL 설정 발생 상황 Springboot 3.0 에서 QueryDSL을 위해 build.gradle과 queryDsl configuration을 다음과 같이 설정했을 때 `JPAQueryFactory` 생성자를 찾을 수 없는 에러가 발생합니다. dependencies { implementation "com.querydsl:querydsl-jpa:5.0.0" annotationProcessor( "javax.persistence:javax.persistence-api", "javax.annotation:javax.annotation-api", "com.querydsl:querydsl-apt:5.0.0:jpa" ) } import com.querydsl.jpa.impl.JPAQueryFactory; import jak.. 2023. 9. 23.
`@Cachable` 사용시 SpelEvaluationException 발생 발생 상황 Spring data Redis 의존성 주입 후, @Cachable 적용하여 테스트하다가 다음의 에러를 만났습니다. 2023-09-18 10:44:26.783 ERROR 7339 --- [nio-8080-exec-4] c.t.secondhand.global.dto.ErrorResponse : EL1030E: The operator 'SUBTRACT' is not supported between objects of type 'java.lang.Long' and 'null' org.springframework.expression.spel.SpelEvaluationException: EL1030E: The operator 'SUBTRACT' is not supported between objects.. 2023. 9. 18.