Wil 13

WIL (12주)

실전 프로젝트 이번주는 내내 엘라스틱 서치를 공부했다. 월,화 요일은 ELK의 기본적인 개념과 사용방법을 공부하고 로컬에 해서 실습해본 뒤 그 후에는 스프링과 연동해보는 작업을 했다. ELK 스택의 흐름과 연동에 성공하고 수요일부터는 본격적으로 EC2에 ELK를 설치하는 작업을 진행했다. 기존에 사용하던 m2.micro로는 도커로 엘라스틱 서치만 설치해도 서버가 죽어버려서 m2.medium으로 진행했다. 로컬과는 환경이 달라서 설정하는데 많은 시간을 소모했지만 나름 무난하게(?) 연결에는 성공했다. 이제 RDS의 책 데이터를 엘라스틱에 넣어주는 작업을 해야했는데 여기에 많은 시간과 에너지를 쏟아부었다. 생각보다 데이터가 빠르게 들어가지 않았고 일정 주기로 쉬지 않으면 서버가 다운되어 버리는 현상이 있었다..

항해99/TIL | WIL 2023.04.09

WIL(11주)

실전 프로젝트 이번 주는 크게 페이지네이션과 풀텍스트 인덱스를 공부했다. 원래 OFFSET 기반의 페이지네이션을 cursor기반 페이지네이션으로 변경했다. 이유는 크게 두 가지인데 첫째는 OFFSET방식은 페이지가 넘어갈수록 속도가 느려지는 부분이었고 두번째는 원래 페이지네이션에서 카운트쿼리가 속도의 대부분을 잡아먹는 문제가 있었다. 커서 페이지네이션을 적용함으로써 두 문제를 해결하였고 그렇게 쉽게(?) 넘어가는 듯했다. 하지만 풀텍스트 인덱스를 적용하고 난 뒤, 기본정렬이 뒤틀려서 페이지를 넘어가도 상위 몇 개의 제품은 계속 남아있는 문제가 발생하였다. 문제의 원인을 파악해보니 기존의 데이터는 Id오름차순으로 데이터가 출력됐는데 풀텍스트 인덱스를 적용해서 나오는 결과는 정확도라는 점수를 기반으로 내림차..

항해99/TIL | WIL 2023.04.02

WIL (10주)

실전 프로젝트 실전 프로젝트 2주차다. 어제 중간 발표가 있었고 그에 대한 피드백을 받았다. 아래는 피드백의 내용을 정리한 것이다. 사전질문 1. 검색하는 필터가 다양한데 엘라스틱서치 도입 전에 인덱스를 어떻게 활용해서 검색을 할 수 있을지? 답변 : 단순 검색은 full-text, 필터는 복합 인덱스? 여전히 고민중이다. 피드백 : 복합 인덱스는 여러 개여야 한다. 어떤 순서로 나열할 지는 데이터의 카디널리티를 잘 고려해서 어떤 인덱스를 왜 만들었는지 고민하는게 필요하다. 인덱스의 동작하는 방식을 이해하는 것이 중요하다! 그 후에 엘라스틱 서치로 넘어가는 것이 좋다고 생각한다. 추가적으로 테스트 기록할 때 JMeter를 이용하면 다양하고 좋은 테스트 결과를 얻을 수 있다. 2. 동시성 이슈에 대한 테스..

항해99/TIL | WIL 2023.03.26

WIL (9주)

실전 프로젝트 이번주부터 실전 프로젝트에 들어갔다. 실전 프로젝트에 들어가기 전에 조원들과 토의하여 선정한 주제가 있어서 그 내용을 SA에 작성하고 준비를 하고있었는데 까였다. 원래는 어제 멘토님과 첫 만남이였어야 했지만 저번주 일요일에 잠깐 만나서 문제점에 대해서 지적해주셨다. 우리 주제가 너무 모호하고 어떤 챌린지 거리가 있는지 잘 모르겠다고 하셨다. 그래서 월요일 하루동안 주제만 생각하고 그날 밤에 다시 정한 주제와 진행 방향에 대해 전달했고 괜찮다는 답변을 받고나서 다시 시작했다. 살짝 힘들기는 했지만 그래도 초기에 문제를 해결해서 다행이라는 생각도 들었다. 이번주는 챌린지하기 위한 기본토대를 만들었다. 크롤링을 해서 하루종일 데이터를 모으고 프론트 작업을 진행해서 얼추 형태는 만들었고 간단한 검..

항해99/TIL | WIL 2023.03.19

WIL (8주)

클론 코딩 프로젝트 이번 주차는 클론 코딩을 진행하였다. 우리 조는 인스타그램을 클론하기로 정하고 작업을 진행했다. 기본적인 CRUD 중에서 나는 댓글과 관련된 부분을 맡아서 댓글 CRUD, 좋아요, 대댓글 작성 기능을 구현하였다. 그리고 추후에 시간이 남으면 DM까지 진행해보고 싶어서 WebSocket을 이용한 채팅을 공부하고 STOMP를 사용해서 로컬 환경에서 채팅까지는 구현하였다. 그리고 하나의 서버가 아닌 여러 개의 서버를 사용하는 경우의 채팅을 구현하기 위해 Redis를 사용하는 채팅을 구현하였다. 아쉽게도 시간이 맞지 않아서 DM기능은 프로젝트에 반영하지는 못했지만 WebSocket을 이용한 실시간 채팅을 경험해보면서 새로운 지식을 배울 수 있었다. 그리고 아직 협업이 익숙하지 않아서 API ..

항해99/TIL | WIL 2023.03.12

WIL (7주)

미니 프로젝트 주특기 3주 공부를 마치고 처음으로 프론트 분들과 협업을 진행했다. 아직 부족한 점이 많다고 느껴서 시작할때 굉장히 불안했다. 다행히 백엔드쪽 구현은 기본 과제의 내용과 유사했고 추가적으로 S3를 이용한 이미지 업로드를 시도해봤다. 기능을 구현하는 것은 크게 어렵지는 않았지만 프론트와 연결에서 많은 어려움이 있었다. 특히 CORS와 관련된 애러가 많이 발생했다. 이런 에러들을 겪어보면서 서버와 클라이언트간의 통신에 대해서 더 공부했고 CORS 정책이 왜 존재하는지 알게 되었다. 그리고 기능 구현만이 전부가 아니라 프론트와 백의 소통이 중요하다는 것을 느꼈다. 그 중에서 API 명세서가 핵심이라고 생각한다. 혼자 과제할 때는 하다가 수정할 부분이 있으면 그냥 수정해도 되지만 협업은 각자가 구..

항해99/TIL | WIL 2023.03.06

WIL (6주)

CORS (Cross Origin Resource Sharing) CORS를 알기 위해서는 우선 Orgin과 SOP를 알아야 한다. Origin URL에서 프로토콜, 도메인, 포트 번호를 합친 부분이다. SOP (Single Origin Policy) 다른 오리진으로 요청을 보낼 수 없도록 하는 기본적인 브라우저의 보안 정책이다. 원래는 다른 오리진으로 요청을 보낼수가 없다. 하지만 시간이 흐르면서 다른 오리진들 간의 소통이 필요해졌고 이를 위해서 CORS가 등장했다. CORS설정으로 필요한 경우에만 서로 다른 Origin끼리 소통을 할 수 있다. CORS는 기본적으로 브라우저의 정책이다. 브라우저가 자신이 보낸 요청과 서버로부터 받은 응답을 비교하고 버릴지 받아올지를 판단한다. 서버는 그냥 요청이 오면..

항해99/TIL | WIL 2023.02.26

WIL (5주)

ORM은 관계와 객체를 매핑해주는 기술을 의미한다. 관계형 데이터베이스와 자바의 객체의 매핑을 이용해서 자바로 데이터베이스를 간접적으로 다룬다. 자바에서는 JPA를 ORM의 기술표준으로 사용하고 있다. JPA는 엔티티 매니저를 통해서 데이터의 변화를 저장하고 DB에 반영한다. 엔티티 매니저에 존재하는 영속성 컨텍스트가 가상의 DB역할을 하면서 변경사항과 DB에서 불러온 값을 저장한다.데이터는 영속성 컨텍스트의 1차 캐시에 저장되고 쿼리는 SQL 저장소에 저장된다. 그리거 트랜잭션이 커밋되면 변경사항이 DB에 반영된다. 트랜잭션이 커밋되지 않으면 반영이 안되므로 주의해야 한다. JPA을 사용하면 객체로 DB를 관리할 수 있지만 아무래도 동작 방식이 다르다보니 한계가 있다. 객체로 관리하면 굉장히 복잡하지만..

항해99/TIL | WIL 2023.02.19

WIL (4주)

IoC (Inversion of Control) 제어의 역전이라는 뜻으로 예시를 들어보겠다. class Car { GeneralTire tire = new GeneralTire(); } class GeneralTire { public void run() { System.out.println("일반 타이어가 굴러갑니다."); } } 자동차에 일반타이어를 넣어서 굴리는 예시다. 근데 눈길에 강력한 스노우타이어가 나와서 교체하려고 하면 코드가 이렇게 된다. class Car { SnowTire tire = new SnowTire(); } class GeneralTire { public void run() { System.out.println("일반 타이어가 굴러갑니다."); } } class SnowTire ..

항해99/TIL | WIL 2023.02.12

WIL (3주)

오늘부터 3주차가 끝났다. 알고리즘주차가 끝났고 그저께부터 Spring 공부를 시작했다. 이번 주 내용 1. 월 ~ 목 / 알고리즘 알고리즘 주차는 하루종일 문제만 풀었다. 다양한 문제를 풀어보면서 여러 자료구조를 사용해볼 수 있었다. Collection 프레임워크를 책으로 이론만 공부하고 넘어갔었는데 실제로 사용해보니 굉장히 효과적이였다. 배열로 풀면 복잡한 로직인 자료구조를 변경하니 간단하게 끝나는 경우가 많았다. List : 배열 길이를 선언하지 않아도 생성이 가능해서 가장 많이 사용했다. 저장할 값의 수를 모를 경우 ArrayList를 사용하였다. Set : 중복을 허용하지 않아서 중복 제거 문제에서 유용하게 사용했다. Map : List와 Set은 사용범위가 정해진 느낌이였는데 Map은 다양하게..

항해99/TIL | WIL 2023.02.05