Today I Run 43

'지피지기면 백전백승'의 반댓말은?

지피지기가 아니면 백전백패.. 나는 98패쯤 하고 있었다. 어떤 문제가 발생해도 왜 그런지 알 수 없었고 그냥 다시해보니까 되더라~ 는 식의 비겁한 패배를 쌓아오고 있던 것이다. 하지만 멋진 개발자가 되기 위해서는 문제를 진단하고 멋들어진 해결까지 가능해야 하기 때문에 백전백승의 조건인 지피지기를 하기로 했다. 친한 지기들과 지피를 위해 고른 책이 이다. 유명한 책이기도 하고 두껍지않아서 스터디를 시작하기에 좋은 책이라고 생각됐다. 각자 책을 읽고 궁금했던 부분을 해소하고 GPT와 진행한 딥다이브를 공유하는 시간을 주로 가졌다. 처음에 책을 펼때는 한줄한줄 곱씹으며 모든 것을 소화해내겠다는 다짐을 했지만,, 책을 읽고 정리하는 것만으로도 시간이 없었다 ^^;;많은 것들을 배웠지만, 실무에 적용할 수 있..

Today I Run 2025.03.23

재귀쿼리에 대해 알아보자

어떤 객체가 다른 객체에 속하는 경우가 있다. 댓글과 대댓글, 상위조직과 하위조직 등 각종 Tree 구조가 그렇다. 데이터 베이스에 Tree형식으로 데이터를 삽입하는 방법은 간단하다. parent_Id 라는 컬럼을 만들어 부모의 pk값을 저장하고 있으면 된다. 단일한 부모찾기는 쉽다. 그냥 자식에게 적혀있는 부모의 번호를 부르면 된다. 하지만 할머니를 찾고 싶다면...? 증조할머니를 찾고싶다면..?코드단에서는 이런일을 그래프 탐색, DFS나 BFS로 해결한다. 즉 테이블을 통째로 꺼내서 코드단에서 그래프 탐색을 통해 트리를 만들어줘도 된다는 말이다! 하지만 이런 방법은 DB 성능적으로 반갑지 않은 일이다. 그래서 우리는 처음부터 쿼리로 트리를 예쁘게 꺼내오는 방법을 생각해볼 수 있다.  MySql로 트리..

Today I Run 2024.09.13

로컬 우분투서버에 백엔드 배포하기

도커를 사용해서 로컬서버에 스프링부트 프로젝트를 배포해보자! 크게 두 가지 방법이 생각났다.1. 서버 컴퓨터에서 프로젝트를 클론받아 도커 이미지 만들고 배포하기2. 내 컴퓨터에서 도커를 깔아 이미지 만들고 도커허브에 이미지 push 하기 서버 컴퓨터는 ssh로 접근하기때문에 깃 형상관리나 프로젝트 상태를 눈으로 (GUI로) 감시하기 힘들기 때문에 2번으로 진행시켜야겠다. 일단 도커 파일을 작성해야한다.FROM openjdk:21WORKDIR /appCOPY build/libs/app-0.0.1.jar app.jarEXPOSE 8080ENTRYPOINT ["java", "-jar", "app.jar"]  내 컴퓨터에서 이미지를 말아서 올려보자docker build -t [태그명] .docker push [..

Today I Run 2024.08.24

로컬 우분투에 postgres 띄우기

로컬 컴퓨터를 서버로 이용해 개발을 진행하기 위해 리눅스 하나를 준비해 서버로 세팅하자.postgresql 설치하기sudo apt-get install postgresql postgresql-contrib설치가 완료되면 버전을 확인할 수 있다.$ psql --version계정과 DB생성sudo -i -u postgres createuser 계정이름 -s -P createdb DB이름배포하기여기는 postgres가 아니라 서버계정으로 들어가야한다.$ sudo vim /etc/postgresql/14/main/postgresql.conflisten_addresses = '*' 로 수정해서 모든 주소에 대해 접근가능하도록 한다. 혹은 정확한 주소를 적어도 된다.$ sudo vim /etc/postgres..

Today I Run 2024.08.21

[TroubleShooting] use --enable-preview to enable unnamed classes 에러 (+Java 19 이상)

에러내용 private OrderSpecifier getMembersOrder(Pageable pageable) {              ^ (use --enable-preview to enable unnamed classes) 동적 쿼리를 위해 OrderSpecifier를 잘 써왔는데.. 오늘따라 갑자기 노란색 밑줄이 생기면서 컴파일 에러가 발생했다. 자바 21로 프로젝트를 진행중인데 자바 19 이상부터 새로운 미리보기 기능(unnamed classes)을 사용해야 한다고 한다. Maven : pom.xml 에 추가 org.apache.maven.plugins maven-compiler-plugin 3.8.1 ..

Today I Run 2024.07.24

Facade Pattern 이해하고 서비스에 적용하기

사건의 발단" service 끼리 참조하지 않도록 파사드 패턴을 사용해서 개발하자 " 프로젝트를 시작하며 선배가 했던 말이다. 정보처리기사를 공부하며 디자인패턴을 개념적으로는 알고 있었지만 실무에 적용해볼 생각은 해본적이 없다! 그래서 파사드 패턴을 사용하라는 말이 내게는 매우 추상적으로 들렸고, 완벽히 적용하기 위해 공부를 시작했다service 끼리 참조하면 무슨 일이 벌어지나?순환참조는 A클래스가 B를 참조하고, B클래스가 A를 참조하는 것이다. 서로의 Bean에 등록되는 것이기 때문에 lazy 순환참조의 고리를 끊도록 재설계하는 것이 최선이다.예시로 살펴보자면Member Entity, Team Entity가 있고, 각각의 CRUD를 구현한 Service 가 있다고 가정해보자. 그런데 Member를 ..

Today I Run 2024.07.03

[TroubleShooting] Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument

Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument 트슈 : TEST 코드 작성 중 발생한 에러개발할 때 CommonEntity를 두고 create_at, modified_at과 같은 엔티티의 생성과 수정을 자동으로 기록할 수 있도록 Auditing을 정의한 후 일반 엔티티에 상속받아 사용하고 있다. 이 때 Application class에서  @EnableJpaAuditing 를 달아 트랜잭션 커밋 시점에 플러시가 호출될 때, 하이버네이트가 자동으로 시간 값을 채워주도록 한다. test는 항상 applica..

Today I Run 2024.06.09

[GoogleStudyJam] AI와 어사 탈출하기(수료완료!)

AI가 세상을 바꿔놓을거라는 말을 들은지 어언 10년.. 그 동안 나는 대학을 거쳐 싸피를 거쳐 개발자가 되었다. 앞으로는 변호사도 판검사도 사람의 직업이 아닐것이라는 엄포를 들으며 두려움을 키워갔는데, 결국 AI는 싸움 상대가 아니라 친구가 되어야 한다는 진리를 얻었다. AI에게 어떻게 말을 걸까 고민하던 차에 구글 스터디 잼을 알게되었고 부담없이 온라인 강의를 들을 수 있어 신청했다. 가장 좋았던 점은 그냥 강의만 듣는것이 아니라 실습을 해 볼수 있다는 것이다. 구글에서 제공하는 인공지능 API나 라이브러리를 바로 사용해 볼 수 있고, 실습에서 가장 긴장되는 '코드 따라치기' 없이 주어진 스크립트를 실행시켜가며 진행하는 점이 마음에 들었다. 파이썬을 잘 몰라도 코드를 읽는 정도는 할 수 있고 버전이나..

Today I Run 2024.05.29

[GoogleStudyJam] Vector Search and Embeddings

Vector Search의미적 유사성에 초점을 맞춘 벡터 검색을 사용하면 유사성 높은 것들을 검색할 수 있다. 의미상 유사하거나 관련된 수십억 개의 항목을 검색하는 기능이 있다.vector 검색이 왜 중요한가? :keyword search와 같은 기존 검색 기술과 다른 점 : 키워드 검색은 웹 크롤링, 키워드 색인 생성으로 시작하여 검색 및 순위 지정을 통해 결과를 제공하는 프로세스를 따른다. 데이터는 테이블에 저장되며 검색은 어느정도까지 유효하다.사람들이 점점 더 정교한 검색 기능을 요구함에 따라 검색 엔진이 더욱 지능적이고 사용자의 의도를 더 잘 이해할 수 있기를 기대한다. 또한 검색엔진이 요약 생성 및 추천 생성과 같은 광범위한 작업을 수행하기를 원한다. 그러나 기존 검색기술은 쿼리의 의도와 컨텍스..

Today I Run 2024.05.20

[GoogleStudyJam] Transformer Models and BERT Model

Transformer-ModelTransformer 이전 모델은 단어를 벡터로 표현할 수 있었지만, 이런 벡터에는 context가 포함되지 않았다. 예를 들어 은행나무의 은행과 은행 강도의 은행은 attention mechanism이 등장하기 전에 같은 벡터를 사용했을 가능성이 있다. Transformer model은 인코더 디코더 모델이며 attention mechanism를 사용한다. 또한 모델 아키텍처를 통해 동시 로드를 활용하고 대량의 데이터를 동시에 처리 할 수도 있다. 주목 매커니즘은 기계 번역 어플리케이션의 성능을 개선하는데 도움이 된다.인코딩 컴포넌트는 같은 숫자로 이루어진 인코더의 stack이다. 6개의 인코더를 상호 간에 스태킹한다. (6은 초매개변수에 불과하다) 인코더는 모두 구조적으..

Today I Run 2024.05.10