전체 글 147

프로시저와 여러 의견들

프로시저란(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를 이용한 설치였기 때문에 일반 바이너리로 설치하는 가이드를 찾아서 진행하였다. 이 과정에서도 리눅스 머신 세팅을 할 수 있는 권한이 없기 때문에 상당히 애를 먹었다. 하지만 적용을 하였고, 개발 뿐만아니라 기획, 아트 등 다양한 직군이 사용할 수 있도록 계속 만들어 ..

JAVA 기초다지기 (3) - Class , Object, Instance 완벽 이해

클래스, 오브젝트, 인스턴스는 워낙 범용적으로 많이 쓰이고 있다. 여기서는 자바에서의 클래스, 오브젝트, 인스턴스의 관계와 의미에 대해서 정리하였다. 클래스와 객체(Object) 클래스로 모델링한 객체를 정의한다. 객체를 생성할 수 있는 틀을 제공해 주는 소스코드 객체는 클래스의 인스턴스이다. 클래스와 객체, 인스턴스 용어 구분과 인스턴스화 클래스(Class) : 붕어빵 틀 = 하나의 붕어빵 틀로 수많은 붕어빵 객체를 만들 수 있다. 객체(Object) : 붕어빵(들), 객체는 인스턴스를 포함하는 일반적인 의미 인스턴스(Instance) : 각각의 붕어빵(인스턴스는 클래스를 통해 생성된 객체의 한 예이다. 인스턴스화(Instantiate) : 붕어빵을 굽다(클래스로부터 인스턴스를 생성하는 것) 인스턴스화..

JAVA 기초다지기 (2) - JAVA 프로그램

Main() method Java 어플리케이션의 시작점으로 main() 메소드가 포함된 클래스가 반드시 존재해야한다. RunTime에 main()메소드가 존재하지 않는 경우 아래와 같은 오류 발생 : Exception in thread "main" java.lang.NoSuchMethodError.main Command-Line arguments : main 메소드의 파라미터를 통해 애플리케이션 진입시에 값을 전달 할 수 있다. 이 기능을 활용해서 애플리케이션 구동시 초기 설정 환경 변수등의 값으로 활용할 수 있다. public static void main(String[] args) Compile & Running compile : javac 명령어를 이용하여 java 소스를 Compile gkaus ..

JAVA 기초다지기 (2) - JVM

JVM이란? JVM(Java VIrtual Machine)은 자바 가상 머신으로 다양한 플랫폼(OS)위에 가상 머신 역할로 자바로 개발한 바이트 코드(.class 파일)가 실행될 수 있도록 런타임 환경을 제공하며 각 플랫폼별 JVM은 오라클이나 Open JDK 개발사들이 제공한다. 이렇기에 플랫폼 독립적인 언어 JVM이 구동되면 OS에서 프로세스 형태의 Runtime instance로 구동된다. JVM의 주요 Task : 코드 로드/확인/실행, 런타임 환경 제공 JVM 제공하는 기능 : 메모리 영역, 클래스 파일 형식, 레지스터 세트, 가비지 콜렉터, 치명적 오류 보고 등 JVM Architecture JVM 내부구조는 Class Loader, Memory Area, Execution Engine 을 포..

JAVA 기초다지기 (1) - Java Overview

개요 사실 학부 때는 C++과 파이썬만 배우고 사용하였다. 졸업 후 SSAFY를 하면서 자바라는 언어를 처음 접했고, 대강 배워 프로젝트를 진행하였다. C++ 짬밥이 있기 때문에 사용하는데 어렵지는 않았지만 C++과는 다른 점이 많았기에 회사에서 개발을 하면서 스스로 부족한 점을 느꼈다 마침 사내 교육사이트가 개편되어 다양한 플랫폼에서 강의를 들을 수 있게 되었고, 그 중 러닝스푼즈의 20년차 개발자의 실무 개발 노하우를 담은 JAVA 기초 라는 말에 끌려 바로 신청하게 되었다. 총 18강 열심히 달려볼 예정이고, 중요하다고 생각되는 내용을 블로그에 정리할 예정! JAVA 언어의 특징 JAVA 설명은 생략한다... JAVA 개발 도구 JDK(Java Development Kit) : 자바 개발 도구로 J..

728x90