TIL 50

Java 추상 클래스와 인터페이스 구분

지난 시간에 객체지향 프로그래밍(OOP)에 대해 포스팅을 했었습니다. 객체 지향의 특징 중 추상화(Abstraction)에 대해는 간단한 정의만 하고 넘어갔었습니다. 그 이유는 추상 클래스와 인터페이스를 같은 것이라고 생각을 하시는 분이 많은데, 사용용도 면에서 큰 차이가 있어서 좀 더 정확하게 비교해가며 이번 포스팅을 하려 합니다. 사실 추상 클래스와 인터페이스의 구분은 면접 단골 질문이기도 합니다. 이론적으로는 누구나 외우기만 하면 대답할 수 있습니다. 하지만 그런 이론적인 내용 말고 정작 "언제 인터페이스를 사용하는 게 좋을까요?", "추상 클래스를 사용하면 안 되나요?"라는 실무적인 질문이 들어오면 대답하는 것이 생각보다 어려울 것 같습니다. 저도 마찬가지이고, 그렇기에 공부하면서 포스팅을 진행 ..

TIL 2022.05.18

객체 지향 프로그래밍(OOP)이란?

객체 지향 프로그래밍이란 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하며 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 현재 제가 주로 사용하는 언어인 JAVA도 객체지향 언어이기 때문에, 자연스럽게 OOP(Object-Oriented Programming)에 대해 공부하게 되었습니다. 절차 지향 절차지향 프로그래밍이란 물이 위에서 아래로 흐르는 것처럼 순차적인 처리가 중요시되며 프로그램 전체가 유기적으로 연결되도록 만드는 프로그래밍 기법이다. 프로그램을 기능 중심으로 바라보는 방식으로 '무엇을 어떤 절차로 할 것인가?'가 핵심이 된다. 즉, 어떤 기능을 어떤 순서로 처리하는가에 초점..

TIL 2022.05.16

JPA 영속성 컨텍스트 정의 및 핵심요약

스프링 부트와 JPA를 공부하다가 update 기능에서 데이터베이스에 쿼리를 날리지 않아도 기능이 원활하게 수행되는 코드를 보게 되었습니다. 찾다 보니 JPA의 영속성 컨텍스트와 관련이 있는 걸 알아서 이 부분에 대해 포스팅해보려 합니다. JPA 영속성 컨텍스트 JPA 영속성 컨텍스트(Persistence Context)란 엔터티를 영구 저장하는 환경이라는 뜻으로, 애플리케이션과 데이터베이스 사이에서 객체를 보관하는 가상의 데이터베이스 같은 역할을 한다. EntityManager에 엔티티를 저장하거나 조회하면 EntityManager는 영속성 컨텍스트에 엔티티를 보관하고 관리한다. Entity를 영속성 컨텍스트에 저장하는 코드이며, 해당 코드는 DB에 저장이 안 된 상태이다.(트랜잭션이 끝나야 DB에 반..

TIL 2022.05.12

JPA의 정의와 장·단점

현대의 웹 애플리케이션에서 관계형 데이터베이스(RDB)는 빠질 수 없는 요소입니다. 그러다 보니 객체를 관계형 데이터베이스에서 관리하는 것이 무엇보다 중요하게 되었습니다. 관계형 데이터베이스가 웹 서비스의 중심이 되다 보니 현업 프로젝트들은 대부분 애플리케이션 코드보다 SQL로 가득하게 되었습니다. 이 부분을 해결하고자 JPA가 나오게 되었습니다. JPA란? JPA(Java Persistence API)는 자바 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다. 즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임 워크이다. ORM 애플리케이션 Class와 RDB의 테이블을 연결한다는 뜻이며, 기술적으로는 애플리..

TIL 2022.05.10

가짜 데이터 생성 Faker.js 파헤치기

실무에서 단위 테스트를 작성할 때 가짜 데이터가 필요할 때가 왕왕 있습니다. 저는 실무에서 여러 군대에서 faker.js를 사용하여 테스트 코드를 작성했었는데 특히 동접자 3만 명 이상의 데이터가 들어왔을 때, 데이터를 가져오는 과정에 문제가 없는지에 대해 체크를 할 때 유용하게 사용했습니다. 3만 개의 데이터를 하드 코딩하는 것은 당연히 무리가 있을 것입니다. 또한 프로젝트 상 데이터가 중복되면 안 되는 상황이어서 faker.js를 사용하게 되었습니다. Faker 시제품을 개발하거나 단위 테스트를 작성할 때 가짜 데이터가 필요할 때가 자주 있습니다. Faker란 영어 뜻 그대로 가짜 데이터를 쉽게 생성할 수 있는 라이브러리입니다. 사용 방법으로는 ES 모듈을 사용하는 프로젝트에서는 import 키워드를..

TIL 2022.05.03

Maven VS Gradle

이동욱 님의 '스프링 부트와 AWS로 혼자 구현하는 웹 서비스'를 보면서 토이 프로젝트를 진행하다가 Gradle 빌드 도구를 접하게 되었습니다. 평소에 실무에서도 Maven을 주로 사용하였는데 '두 도구의 차이가 뭘까?'라는 생각에 이어 포스팅을 하게 되었습니다. Maven 프로젝트를 진행하다 보면 많은 라이브러리를 활용해서 개발을 하게 됩니다. 이 때 사용되는 라이브러리들의 수가 많아지면 그만큼 라이브러리들을 관리하는 것이 힘들어지게 됩니다. Maven은 이러한 문제를 해결해주는 일종의 도구입니다. Maven은 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는데 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동으로 다운로드해줍니다. LifeCycle Maven에서는 미리 정의하고 있..

TIL 2022.05.02

Load Balancing, Sticky Session, Session Clustering

동시 접속자가 많은 프로젝트를 진행하면서 아키텍처 부분에 많은 관심이 생겼어요. 최근에 선착순으로 진행되는 이벤트 프로젝트를 전담하면서 세션 처리가 끊어지는 문제점을 맞닥뜨렸는데, 그 부분에 대해서 공부를 하다 보니 로드밸런싱과 스티키 세션, 세션 클러스팅을 알게 되어 포스팅하려 합니다 Load Balancing(로드 밸런싱) 트래픽이 많을 때 여러 대의 서버가 분산처리하여 서버의 로드율을 증가, 부하량, 속도 저하 등 고려하여 분산 처리하여 해결해주는 서비스입니다. 로드밸런싱을 해주는 소프트웨어 혹은 하드웨어 장비를 로드밸런서(Load Balancer)라고 합니다. 동작 방식 1. 네트워크 상단에 가상서버가 존재하여 서버로 들어오는 패킷을 리얼 서버로 균일하게 트래픽을 분산시킵니다. 2. 서버에 장애가..

TIL 2022.04.28

Maven pom.xml 설정 뜯어보기

개발자들이 편하게 서로 협력하면서 일을 할 수 있도록 개발된 프로그램 중 Maven이 있습니다. Maven은 프로젝트를 빌드해주고 라이브러리를 관리해주는 기능들이 있으며, 더 나아가 필요한 라이브러리의 하위 라이브러리까지 버전에 맞게 받아주는 장점이 있습니다. Maven Maven은 앞서 정의한 내용처럼 필요한 라이브러리를 특정 문서(pom.xml)에 정의해 놓으면 내가 사용할 라이브러리뿐만 아니라 해당 라이브러리가 작동하는 데에 필요한 다른 라이브러리들까지 관리하여 네트워크를 통해 자동 다운을 해줍니다. 빌드 순서는 complie->test->package 순으로 진행됩니다. complie은 src/main/java 디렉토리 아래의 모든 소스 코드를 컴파일하는 과정이고, test는 src/test/ja..

TIL 2022.04.22

GitHub Can't connect to any repository 오류 (feat.eclipse)

GitHub를 사용하다 보면 아무것도 건드린 게 없는데 갑작스러운 오류를 만날 때가 종종 있습니다. 오늘은 Can't connect to any repostiry 오류에 대해 포스팅하려 합니다. 무슨 오류일까? 깃허브에 소스를 Push하기 위해서는 기존은 패스워드를 입력해야 했었습니다. 하지만 이제는 GitHub에서 ID/PW 기반의 Basic Authentication 인증을 금지하고, ID/Personal Access Token 방식의 Token Authentication 인증을 요구하고 있습니다. 해결법으로는 GitHub에서 토큰을 발급받아 설정해주어야 합니다. [ 토큰 생성 방법 ] 1. GitHub 로그인 후 오른쪽 상단에 프로필을 클릭해서 Settings 탭을 클릭합니다. 2. 좌측 하단의 D..

TIL 2022.04.20

Object object 해결법 및 multer form-data

실무에서 [Object object]를 만나는 건 생각보다 흔합니다. 이번에 프로젝트를 진행하면서 저는 Vue.js에서 Object로 구성된 배열을 Controller와 Service에 넘겨야 하는 작업을 진행하였습니다. 하지만 Controller에서 Debugging 결과 [Object object]만 나올 뿐 어떤 값도 찾아볼 수가 없었습니다. 해결 과정을 알아볼게요! Multer Module 처음으로 설명할 것은 Multer 모듈입니다. 맨 처음에 form-data를 이용해서 값을 넘길 때, 아무런 값도 받아지지가 않았습니다. express에서는 multipart/form-data 를 다루기 위한 미들웨어인 Multer를 사용한다. node.js를 사용하던 저는 당연히 multer를 설치하지 않아 ..

TIL 2022.04.16