개발자로서 살아남기 52

면접을 위한 CS 전공지식 노트 - 1.1.4 옵저버 패턴

옵져버 패턴 옵저버 패턴(observer pattern)은 주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다. 대표적인 사례 트위터 유튜브 특정 정보를 여러 뷰에서 동시에 얻기 위해 주제자(Subject)에 구독자(Observer)를 등록(Register) 하여 정보를 받는(갱신, Notify) 것을 옵저버 패턴(Observer pattern)이라 한다. 물론 등록을 했으니 해지(Remove)도 가능하다. 코드로 보는 옵져버 패턴 그럼 이제 본격적으로 코드를 확인해 보겠습니다. 여기서 보여드릴 예시는 Subject class에서 값을 변경하면 등록된 모든 Observer들에게 갱신하는 간단..

프로시저와 여러 의견들

프로시저란(Stored procedure)? 저장 프로시저는 일련의 쿼리를 마치 하나의 함수처럼 실행하기 위한 쿼리의 집합이다. DB에 대한 일련의 작업을 정리한 절차를 RDBMS에 저장한 것으로, 영구저장모듈이라고도 불린다. 장점 하나의 요청으로 여러 SQL 문을 실행할 수 있는데, 이런 경우 네트워크 부하를 줄일 수 있다. 만약 JAVA 환경에서 10번의 쿼리를 실행한다고 가정한다면, JDBC를 통해 DB에 10번 request 해야한다. 하지만 프로시저를 이용한다면 DB에서 10번의 SQL 실행문을 구현하고 1번만 호출하면 된다. 개발 업무를 구분하여 더 효율적으로 프로젝트를 운용할 수 있다. 애플리케이션만 개발하는 조직과 DB만을 관리하는 조직이 따로 있다면, 애플리케이션 개발자는 JAVA와 같은..

@RequestBody vs @ModelAttribute 차이점

@RequestBody @ModelAttribute 차이점 개요 Spring boot 개발환경에서 Controller 부분 코드를 작성할 때, 아무생각 없이 Method가 GET 이면 @ModelAttribute을 사용하고, POST면 @RequestBody를 사용하였다. 그러다 어느순간 왜? 라는 의문점이 들었고, 두 어노테이션의 정확한 차이를 정리해보기로 한다. @ModelAttribute Spring docs Annotation that binds a method parameter or method return value to a named model attribute, exposed to a web view. Supported for controller classes with @RequestMap..

Spring boot 환경에서 대용량 엑셀 파일 다운로드 하기 - (1)

개요 게임 서버 개발 포지션에 있지만, 최근 게임과 관련된 API 서버를 인수인계 받으며 Spring boot + JPA 환경을 다룰일도 생겼다. 사내 게임의 FGT()를 진행하는데, 기획자 분이 매번 설문조사 결과를 요청하는 일이 있었다. 사실 설문조사 결과를 DB에 들어가 SQL문으로 뽑는 것은 살짝 귀찮고, 어려운 일은 전혀 아니다. 그러나, 굳이 불편하지 않는 일을 불편하다 생각해 무언가를 만드는게 개발자 특이니, API를 만들기로 한다. 요구사항 spring boot와 JPA 환경에서 DB에 있는 필요한 테이블에서 특정 조건(SQL)의 데이터를 csv 파일로 추출하는 API를 만든다. 예시로 2022년 1월부터 5월까지 게임에 결제한 유저 정보를 엑셀 파일로 추출하는 과정을 진행해본다. Enti..

ELK - Kibana 날짜별 데이터 비교하기

개요 팀에서 개발중인 서비스에 ELK을 붙인 이후, kibana에서 데이터를 이용해 다양한 종류의 visualize을 만들고 있었다. (유저 동접 추이, 특정 게임 동접수 등등) ELK와 비슷한 역할을 하는 NHN CLOUD의 Log N Crash 라는 서비스가 있는데, 여기서 제공해주는 visualize 중, 날짜별 데이터를 비교해주는 서비스가 있었다. 같은 기능을 kibana에서도 구현할 수 있을까 구글링을 해봤는데 kibana에서도 제공하는 기능이였다!! 하지만 역시.. 현재 사용하는 ELK 버전에는 존재하지 않은 기능 ㅎㅎ.. 결국 찾은 건 visualize 종류 중 Timelion이다. Timelion은 시계열 데이터 분석에 특화되어 있으며, 함수 형식의 표현식을 사용한다. 또한 코드가 직관적이..

Spring boot & JPA 조인 시 null 반환하기

개요 회사에서 PC방 관련 서비스를 이관하는 작업을 진행 중인데 테이블이 하나 추가되었고, 이 테이블을 기존의 사용하던 real_student(예시) 테이블에서 몇몇 필드가 제거된 테이블이다.(fake_student) 추가된 fake_student와 real_student를 함께 사용할 것이기 때문에 로직 수정이 필요한 상태이다. 요구사항 새로 추가된 fake_student와 real_student를 함께 사용한다는 말을 좀 더 풀어서 설명하자면 fake_student의 PK 값이 있는지 확인하고, 없다면 real_student에서 해당 PK 값을 찾는 것이 핵심 로직이다. 그러나 문제는 기존의 있던 real_student에 많은 테이블들이 조인되어 있다는 점이다. 이를 그대로 두고, fake_stude..

Centos7에 ELK 설치하기 가이드

🔍개요 회사 내 ELK를 주도적으로 적용시킨지 어언 4개월이 지난 것 같다. 알파에서 적용시킨 이후, 리얼에도 적용하였고, 이후 보안 추가, 몇몇 로그가 보이지 않는 문제, 로그의 시간순대로 정렬 등등 다양한 문제들이 있었다. 다만, ELK 업무 외에 다른 업무들이 많았기 때문에 쉽게 손대지 못하고 있다가 시간이 나서, 대대로 개편을 했다. 먼저 회사 내 보안 문제로 irteamsu 계정을 사용하지 못하게 되었는데 대부분 가이드들이 sudo를 이용한 설치였기 때문에 일반 바이너리로 설치하는 가이드를 찾아서 진행하였다. 이 과정에서도 리눅스 머신 세팅을 할 수 있는 권한이 없기 때문에 상당히 애를 먹었다. 하지만 적용을 하였고, 개발 뿐만아니라 기획, 아트 등 다양한 직군이 사용할 수 있도록 계속 만들어 ..

서버개발자로서 살아남기 - 로드 밸런서(Load Balancer)

내가 피파와 같은 축구 게임을 만든 개발자라 가정해보자. (뜬금없지만 로드 밸런서를 알기 위한 사전 설명이다.) 평소 동시 접속자 수는 100명이지만 월드컵 기간에는 1000명으로 늘어 났다. 갑작스럽게 1000명으로 사용자가 늘어나, 서버가 터져버릴 수도 있는 상황이다. 서버 개발자로서 할 수 있는 방법은 뭐가 있을까? Scale-up 말 그대로 서버의 성능을 높이는 방법이다. 예를 들자면, 디스크를 추가하여 용량을 증가하거나, CPU를 추가하여 속도를 높이는 것이다. Scale-out 비슷한 서버의 개수를 추가하는 것이다. 이는 용량이 증가할 뿐만 아니라, 트래픽을 분산하여 성능을 높일 수 있다. 위와 같은 2가지 방법이 있는데, 대부분의 기업들은 비용문제, 확장성과 유연성의 문제로 Scale-out..

ELK - 로그 발생 시간을 기준으로 Kibana 사용하기

🔍개요 ELK를 서버 로그를 분석하기 위해 구축한 이후에 Kibana 시간과 로그 발생 시간이 달라, 보기 불편한 점이 있었다. 이후, 문제를 해결하려 했으나, 여러 프로젝트를 진행 한 탓에 미루고 또 미뤘었다. 프로젝트가 끝나고, ELK 업무를 마무리 짓기 위해 새로운 서버 2대를 ES 클러스터에 추가하는 작업과, 로그 발생 시간에 대한 이슈를 처리하는 작업을 진행하였다. 로그 발생 시간을 Kibana @timestamp로 사용하기 로그 메시지에서 로그 발생 시간 파싱하기 (logstash 설정 변경) 서버팀에서 사용하고 있는 로그 메시지 시간 type은 ISO8601인데, grok패턴에서 TIMESTAMP_ISO8601 사용하면 쉽게 파싱할 수 있다. ## 원하는 filter가 있으면 설정한다. fi..

서버 개발자로서 살아남기 - hosts 파일

🔍개요 평소처럼 swagger에 접속하려 했는데 403 오류가 발생하였다. 해당 담당자에게 문의한 결과 프록시 서버 설정 때문에 그런거고, hosts 파일에서 특정 내용을 추가 요청하였다. 처음에는 hosts 파일이 프로젝트 안에 있는 파일이라 생각하였다. 그치만 보이지 않았고, 인터넷에 처본 결과 내 생각과는 다른 파일이였다. 모르는건 바로 정리들어가야징 🔍hosts 파일이란? hosts 파일은 ip 주소와 도메인을 매핑해주는 파일이다. 우리가 자주 사용하는 도메인을 ip 주소로 변환하는 역할을 하는 것은 DNS Server이다. 그러나 DNS Server을 안거치고 Local에서 설정하는 방법이 바로 hosts 파일을 이용하는 것이다. hosts 파일의 우선순위가 DNS Server 보다 높기 때문에..

728x90