개발일기 118

CRLF vs LF 문제

맥에서 잘되던 프로젝트가 윈도우에서 작업 하면 문제가 생길때가 있다 특히 도커로 프로젝트를 실행했을때 나는 다음과 같은 문제를 직면했다이를 해결하기위해서 인텔리제이에서 gradlew파일들을 하나하나 lf로 변경했다이후 server.sh를 실행했더니 잘되었다. 왜 CRLF와 LF문제가 자주 생길까? 이를 좀 알아보고자 한다.먼저, 윈도우와 맥(리눅스) 환경의 가장 큰 차이 중 하나가 바로 줄바꿈 문자(Line Ending) 방식이다.윈도우는 CRLF(\r\n)맥과 리눅스는 LF(\n)이 차이 때문에, 맥에서 잘 동작하던 쉘 스크립트나 gradlew 같은 파일이 윈도우에서 CRLF로 저장되면, 도커나 리눅스 환경에서 실행할 때 에러가 발생한다. 대표적으로 /bin/bash^M: bad interpreter:..

Kotiln 공부하기

어쩌다 같이 공부하던 팀원의 코틀린 프로젝트에 참여하게 되었다.해야할 작업은 다음과 같다.Spring Boot 2.7 -> 3.X 마이그레이션OAuth 2.0 구현React 연결일단 그전에 Kotlin에 대해 파악하고자 한다. 평소 들어왔던 자바와 코틀린의 차이는 함수형 프로그래밍을 지원한다는 것, 타입을 추론하여 타입지정을 안해도 된다는 것, 그리고 null에 대해 안전하다는 것이다. 우선 함수형 프로그래밍에 대해 공부해보려고 한다.함수형 프로그래밍이 뭐지?함수형 프로그래밍이라... 이름만 들으면 함수를 사용하는 프로그래밍인가? 싶은데, 우리가 평소에 하는 프로그래밍도 다 함수 쓰잖아? 뭐가 다른 거지?알고 보니 함수형 프로그래밍은 프로그래밍 패러다임 중 하나로, 함수를 일급 객체로 취급하고 불변성을 ..

ES 조건 별 검색하는방식 Must, Filter

우리 프로젝트에서 매칭 조건에 따라 검색 결과를 정확하게 도출하려면, Elasticsearch의 bool 쿼리 내에서 must와 filter 방식을 적절히 활용하는 것이 핵심인데 이 방식이 비슷해서 정리하고자 한다.우선 두 방식 모두 "이 조건을 반드시 만족해야 한다"는 공통점이 있지만, 실제 동작 방식과 성능, 그리고 사용 목적에 있어 차이가 뚜렷하다. must는 검색어와 문서의 관련성 점수를 계산해 순위를 매길 때 사용되고, filter는 점수 계산 없이 빠르고 정확하게 필수 조건을 필터링할 때 적합하다. 아래에서는 각 방식의 특징과 실제 활용법, 그리고 우리 프로젝트에서 어떤 방식을 선택해야 하는지 정리했다must와 filter의 차이점 한눈에 보기구분mustfilter점수 계산문서의 _score에..

타임리프에서 SPA로? SSR과 CSR 개념 정리

프로젝트에서 타임리프(Thymeleaf)로 서버 템플릿 기반의 프론트엔드를 만들다가, 좀 더 동적인 화면과 사용자 경험을 위해 SPA(Single Page Application)로 전환하고 싶다는 생각이 들었다. 그러다 보니 자연스럽게 SSR(서버사이드 렌더링)과 CSR(클라이언트사이드 렌더링)이라는 용어도 자주 접하게 됐다.이번 글에서는 SSR과 CSR, 그리고 SPA가 각각 무엇이고, 이들이 어떻게 연결되는지 정리해보려고 한다.SPA, SSR, CSR 용어 정리1. SPA (Single Page Application)한 번만 페이지 전체를 받아오고, 이후에는 새로고침 없이 동적으로 화면을 바꾸는 웹앱 구조대표적으로 React, Vue, Angular 같은 프레임워크가 SPA를 구현할 때 많이 쓰인다장..

DB 변경 감지 (flyway)

프로젝트를 진행하다 보면 데이터베이스 컬럼이나 스키마에 변경이 생기는 경우가 많다. 나 역시 이런 변경 사항을 체계적으로 관리하고, 누락이나 충돌 없이 적용하기 위해 Flyway를 도입한 적이 있다(현재는 제거했지만). 이번 글에서는 Flyway가 DB 변경을 어떻게 감지하고 관리하는지, 그리고 실제로 적용하면서 느꼈던 점들을 정리해본다.Flyway를 도입한 이유처음엔 단순히 "누가, 언제, 어떤 변경을 했는지"를 추적하고 싶어서 Flyway를 도입했다. 기존에는 개발자가 직접 SQL을 실행하거나, 변경 내역을 별도로 관리하다 보니 누락이나 충돌이 자주 발생했다. Flyway는 이런 문제를 해결해주는 대표적인 DB 마이그레이션 도구이다.적용방법1. 의존성 추가implementation 'org.flywa..

테이블 컬럼이 변경되었을때 DB가 동작하는 방식

사이드 프로젝트를 하다가 데이터베이스 테이블 컬럼을 변경했는데, 예상치 못한 에러가 발생했던 경험이 있다. 특히 JPA와 Hibernate를 쓸 때는 ddl-auto 설정에 따라 결과가 완전히 달라지기 때문에, 이번 기회에 ddl-auto 옵션이 뭔지, 그리고 테이블 컬럼을 바꿨을 때 데이터베이스가 실제로 어떻게 동작하는지 정리해보려고 한다.스키마 변경으로 겪었던 문제최근 프로젝트에서 DB 테이블 컬럼 값을 변경했더니 에러가 났다. 예전에 다른 프로젝트에서는 JPA 설정을 ddl-auto: create로 해두니까 테이블이 자동으로 삭제되고 새로 만들어져서 별 문제가 없었는데, 만약 이런 설정이 운영 환경에서 그대로 쓰이면? 모든 데이터가 싹 날아가는 대참사가 벌어진다. 그래서 운영에서는 update나 v..

@Repository

Repository를 인터페이스로 생성할때 JpaRepository 를 상속받게 되면 Repository어노테이션을 붙이지 않더라도 빈으로 주입된다. 이를 나는 JpaRepository내에 이미 어노테이션이 존재하기때문에 안붙여도 된다~~라고 들었기 때문에 그런줄 알고 지냈었다. 그렇게 팀원에게 어노테이션 안에 있어서 안붙여도 되요 라고 했지만 직접 들어가보니 어노테이션이 없엇다. 그럼 실제 어디서 빈등록을 해주는걸까??? 정답은 @EnableJpaRepositories에서 처리를 해준다. 직접 코드를 들어가보면@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Import({JpaRepositoriesRegistrar.cl..

Fegin Client??

HTTP 통신Rest API 넷플릭스에서 만든 통신 라이브러리? 설정 법공식 문서 https://spring.io/projects/spring-cloud Spring CloudSpring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. configuration management, service discovery, circuit breakers, intelligent routing, micro-proxy, control bus, short lived microservices andspring.ioSpring boot 버전에 맞는 의존성 주입우리 프로젝트는 3..