전체 글

💬 들어가며최근 프로젝트를 하며 json 데이터를 DB 컬럼에 그대로 저장해야 할 상황이 많았다.그동안 Nest.js TypeORM으로 json 데이터 타입을 다루는데 큰 문제가 없었는데multipart/form-data로 넘어오는 json 데이터를 저장하며 문제가 발생했다. 개발 환경은 다음과 같다.Nest.js + TypescriptTypeORMPostgreSQL 🔥 문제DB에 저장할 때 이런식으로 \n, \와 같은 개행문자가 들어가 있었다."[\n {\n \"index\": \"1\", ...생략]"조회할 때도 정의된 Json 형식으로 매핑이 안되고 저 데이터 자체가 스트링으로 인식되어 통으로 매핑되었다. 쿼리 매핑 결과{ "data": "[{\"index\": 1}, {..
·💬 회고
💬 들어가며작년 11월에 코드스쿼드 백엔드 과정을 수료하고 올해 2월부터 취준을 시작하고그러다 4월 최종합격을 하게 되고 5월에 입사를 하게 되었다.이제 입사한지 3개월정도 된 시점 오랜만에 회고를 해보려고 한다. 🌱 5월아무래도 개발 공부를 시작하기 전과 동일한 업계에서 일하게 되어서인지 모르겠지만익숙한 툴들과 익숙한 업무 환경에... 적응하는 데에는 크게 무리가 없었다.  그리고 회사 분들 모두 좋은 분들이라 빠르게 적응할 수 있었던 것 같다.5월 목표는 새로운 환경에 익숙해지고 빨리 개발 환경을 세팅하는 것이라 5월은 휘뚜루 마뚜루 시간이 지나갔던 것 같다. 🌼 6월6월부터는 거의 바로 실무에 들어갔던 것 같은데 사실 입사 전부터 계속되었던 고민이 있었다.면접 때부터 들었던 얘기지만 지금 일하..
💬 들어가기 전에현재 개발중인 프로젝트의 환경은 다음과 같다.SpringBoot3JDK 21Postgresql, Redis Cluster그리고 각 서비스를 모듈화하여 멀티 모듈 구조로 개발중에 있다.테스트 환경은 테스트 컨테이너로 구성하였는데,이번에 Redis를 연동하면서 테스트 환경을 구성하는데에 어려움을 겪게 되어 그 과정을 기록하고자 한다. ⚙️ 기존 테스트 환경 설정우선 기존 PostgreSQL만 사용했을 때 설정해두었던 것들은 다음과 같다. TestContainers 클래스에 테스트 컨테이너 관련 설정들을 하고,RestAssuredTest 클래스가 TestContainers를 상속받아 테스트 관련 설정을 했다. 이후 실제 테스트 코드를 작성하는 클래스는 RestAssuredTest를 상속받아 ..
이번주는 가상 함수와 오버라이딩에 대해 공부하는 주차였는데, 포인터에 대한 개념이 확실히 잡혀 있지 않다 보니 이해하기가 조금 어려웠다. C++은 포인터 개념이 이해가 안되면 다음 진도 나갔을 때 확실히 힘겨운 부분이 있는 것 같다. 회사를 다니면서 학교 공부를 따라가야 되다보니 진도에 내가 딸려(?) 가고 있는데,어떻게든 시간을 내서 포인터를 다시 공부해야 겠다는 생각이 들었다. 1. 용어 virtual 키워드: 동적 바인딩 지시어, 컴파일러에게 함수에 대한 호출 바인딩을 실행 시간까지 미루도록 지시함 동적 바인딩: 파생 클래스에 대해 기본 클래스에 대한 포인터로 가상 함수를 호출하는 경우, 객체 내에 오버라이딩한 파생 클래스의 함수를 찾아 실행 = 실행 시간에 바인딩이 일어난다 정도로 이해 2. 오버..
1. 용어 지시자(specifier): 값을 어떻게 출력할 것인지 지정해주는 역할 2. printf() 값을 다른 형식으로 출력하고 싶을 때 printf() 사용 printf()는 지시자를 통해 변수의 값을 여러 가지 형식으로 변환하여 출력하는 기능 출력하려는 값이 n개 이상도 가능하며, 출력될 값과 지시자의 순서가 일치해야 함 2-1. 작성 예시 // int 타입의 변수 age 값이 26일 때 System.out.printf("age:%d", age); // 화면에 "age:26" 출력 System.out.printf("age:%d", 26); // 화면에 "age:26" 출력 System.out.printf("age:26"); // 화면에 "age:26" 출력 💡 println()과 달리 printf..
1. 용어 기본형에는 8개의 타입(자료형)이 있으며, 크게 논리형, 문자형, 정수형, 실수형으로 구분 논리형: boolean - 논리값을 저장, true/false 중 하나를 값으로 갖음 문자형: char - 문자를 저장, 변수에 하나의 문자만 저장 가능 정수형: byte, short, int, long - 정수를 저장, 주로 int를 사용 실수형: float, double - 실수를 저장, 주로 double을 사용 ※ 참고: 문자형 char는 문자를 유니코드(정수)로 저장하기 때문에 boolean을 제외한 다른 기본형과 연산과 변환이 가능함 2. 변수 종류와 크기 정수형의 경우, 각 타입마다 저장할 수 있는 값의 범위가 달라 범위에 맞는 타입을 선택하면 됨 일반적으로는 CPU가 가장 효율적으로 처리할 ..
1. 용어 기본 클래스(base class): 상속해주는 클래스 > 부모 클래스 파생 클래스(derived class): 상속받는 클래스 > 자식 클래스 업 캐스팅(up-casting): 파생 클래스 포인터가 기본 클래스 포인터에 치환되는 것 다운 캐스팅(down-casting): 기본 클래스의 포인터가 파생 클래스의 포인터에 치환되는 것 ※ 업 캐스팅/다운 캐스팅이 이해가 되지 않는다면 포인터의 개념을 먼저 익히기 2. 클래스 상속 기본 클래스의 속성과 기능을 파생 클래스에 물려주는 것 중복된 기능을 기본 클래스로 작성, 보다 자세한 기능은 파생 클래스로 작성 예시) Person Student Worker Programmer 잠자기 먹기 잠자기 먹기 공부하기 잠자기 먹기 일하기 잠자기 먹기 일하기 코딩..
jinny-l
조금씩, 꾸준히, 자주