TIL 44

AOP(Aspect-Oriented Programming) 파헤치기

객체 지향 프로그래밍(OOP)란 우리가 실생활에서 쓰는 모든 것을 객체라 하며, 객체 지향 프로그래밍은 프로그램 구현에 필요한 객체를 파악하고 각각의 객체들의 역할이 무엇인지를 정의하며 객체들 간의 상호작용을 통해 프로그램을 만드는 것을 말합니다. 하지만 OOP는 공통된 기능들이 흩어져 존재하는 단점이 있기 때문에, 이 점을 보완하고자 AOP(Aspect-Oriented Programming) 프레임워크가 탄생하게 되었습니다. AOP란? AOP는 관점 지향 프로그래밍이라고 불립니다. 쉽게 말해 어떤 로직을 기준으로 핵심적인 관점과 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하겠다는 것입니다. 여기서 모듈화란 어떤 공통된 로직이나 기능을 하나의 단위로 묶는 것을 말합니다. 예를 들어 ..

TIL 2022.06.22

TDD 정의 및 암호 검사기 예시

여러 매체를 통해서 Java, SpringBoot, JPA를 공부하다 보니, TDD(Test Driven Development)에 대해 자주 접하게 되었습니다. 또한 실무에서 프로젝트를 진행하였을 때 계속해서 같은 테스트를 진행해봐야 하는 상황이 생겼었는데, 테스트 주도 개발로 개발을 했었더라면 보다 유지보수가 쉬웠지 않았을까 하는 생각이 들었습니다. 그래서 TDD를 공부하게 되었습니다. 이번 포스팅은 TDD를 해야 하는 이유와 간단한 예시를 들어보려 합니다. TDD란? 제목과 같이 테스트로부터 시작하는 개발 방식을 일컫습니다. TDD는 먼저 실패하는 테스트 코드를 작성하고, 테스트를 통과시킬 만큼만 코드 구현을 진행하는 방식입니다. 이후에 어느 정도 테스트 과정이 끝나면 코드 정리(리팩토링)를 통해서 ..

TIL 2022.05.25

Java MVC 패턴 바로 알기

오늘은 Java의 메인 디자인 패턴인 MVC 패턴에 대해 포스팅하려 합니다. 면접 단골 질문이기도 해서 지난날 면접 준비하면서 열심히 외웠던 기억이 나네요.. 한동안 Node로 프로젝트를 진행하다가 다시 Java Spring 프로젝트를 맡게 되어서 다시 한번 MVC 패턴에 대해 짚고 넘어가려고 합니다. 그럼 MVC 패턴에 대해 알아볼까요? MVC 패턴이란? 역사👣 과거에도 많은 개발자분들이 코딩을 했었고, 초창기에는 한 파일에 모든 코드를 넣었다고 합니다. 그러다 보니 기능을 수정할 때, 그 코드를 찾는 것이 힘든 것은 물론이거니와 하나의 코드를 수정하면 대부분의 코드를 수정해야 하는 경우가 빈번히 발생했다고 합니다. 이 말은 즉슨, 유지보수가 불편했다 라고 생각하시면 될 것 같습니다. 그렇게 시간이 흐..

TIL 2022.05.20

Java Enum 클래스

오늘은 Java Enum 클래스에 대해 알아보려 합니다. SpringBoot를 배우면서 자연스럽게 Enum 클래스를 접하게 되었습니다. 실무에서 흔히 final static string을 사용해서 상수를 정의합니다. 하지만 이렇게 정의해서 코딩하는 경우 여러 문제를 야기시킵니다. 그래서 JDK 1.5 버전부터 새롭게 추가된 것이 Enum class입니다. Enum Class 정의📖 C언어와 C++에서는 열거체(enumeration type)를 사용할 수 있지만, JDK 1.5 이전의 자바에서는 열거체를 사용할 수 없었습니다. 하지만 JDK 1.5 이후부터는 C언어의 열거체보다 더욱 향상된 성능의 열거체를 정의한 Enum 클래스를 사용할 수 있게 되었습니다. Enum은 열거형이라고 불리며, 서로 연관된 상..

TIL 2022.05.19

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