반응형

전체 글 111

한글 코딩

소프트웨어 개발에서 한글로 코딩하는 것에 대한 논의는 꾸준히 이루어져 왔습니다.한글 코딩은 특히 한국 개발자들 사이에서 직관적인 변수명과 상수명을 통해 더 명확한 의미 전달을 할 수 있다는 점에서 관심을 받고 있습니다.하지만 한글 코딩은 장점과 단점을 동시에 가지며, 사용하는 데 주의할 점도 존재합니다.이번 글에서는 한글 코딩의 장점, 단점, 그리고 주의해야 할 점을 정리해 보겠습니다.한글 코딩의 장점가독성 향상변수명과 상수명을 한글로 작성하면 개발자가 코드의 의도를 더 명확히 이해할 수 있습니다.예: final int 최대값 = 100;는 영어로 final int MAX_VALUE = 100;보다 직관적일 수 있습니다.의미 전달의 효율성영어에 익숙하지 않은 개발자나 팀에서는 한글이 더 효과적인 의사소통..

ETC 2024.12.27

Spring MVC의 DispatcherServlet: 핵심 개념과 역할

Spring MVC는 Model-View-Controller (MVC) 디자인 패턴을 기반으로 하는 강력한 웹 애플리케이션 프레임워크입니다.이 구조에서 DispatcherServlet은 Spring MVC의 중심에 위치하며 중요한 역할을 담당합니다.이번 글에서는 DispatcherServlet의 역할, 동작 방식, 그리고 왜 중요한지에 대해 자세히 알아보겠습니다.1. DispatcherServlet이란?DispatcherServlet은 Spring Framework의 서블릿으로, 클라이언트 요청을 받아 다양한 처리 로직과 협력하며 적절한 응답을 생성하는 역할을 합니다. 간단히 말해, 웹 애플리케이션의 요청과 응답을 조율하는 "프론트 컨트롤러" 역할을 합니다.2. DispatcherServlet의 주요 역..

Spring 2024.12.24

Spring Boot Run: 내부 동작 과정과 Bean 등록

Spring Boot 애플리케이션을 실행할 때, 여러 단계의 과정을 거쳐 애플리케이션이 구동됩니다. 이 글에서는 Spring Boot의 실행 과정, Bean 등록 과정, 그리고 IOC(Inversion of Control)와 DI(Dependency Injection)가 이 과정에 어떻게 녹아있는지 정리합니다.1. Spring Boot Application 시작Spring Boot 애플리케이션은 @SpringBootApplication 어노테이션으로 시작합니다. 이 어노테이션은 세 가지 어노테이션을 포함합니다:@SpringBootConfiguration: @Configuration을 포함하며, Spring 컨텍스트를 위한 설정 클래스를 나타냅니다.@EnableAutoConfiguration: 클래스패스와..

Spring 2024.12.23

Java Spring MVC에서 ArgumentResolver

Spring MVC에서 ArgumentResolver는 컨트롤러 메서드의 매개변수를 처리하고 주입하는 데 사용되는 중요한 구성 요소입니다.이 글에서는 HandlerMethodArgumentResolver와 이를 활용하여 사용자 정의 로직을 구현하는 방법에 대해 설명하겠습니다.ArgumentResolver란 무엇인가?Spring MVC의 HandlerMethodArgumentResolver는 컨트롤러 메서드의 매개변수를 처리하는 전략 인터페이스입니다.이를 통해 HTTP 요청 데이터를 분석하거나 추가적인 비즈니스 로직을 적용하여 매개변수 값을 동적으로 생성할 수 있습니다.기본 동작 방식Spring MVC는 HTTP 요청을 처리하는 과정에서 컨트롤러 메서드와 매핑된 매개변수를 확인합니다.각 매개변수에 대해 등..

Spring 2024.12.22

Java 예외 처리 방식: Exception 클래스를 개별 생성 vs Enum으로 관리

Spring과 Java 기반의 애플리케이션을 개발할 때, 예외 처리 방식은 시스템의 안정성과 유지보수성에 큰 영향을 미칩니다. 이번 글에서는 예외를 클래스별로 생성하는 방식과 Enum을 사용해 관리하는 방식의 장단점을 비교하여, 상황에 맞는 선택을 할 수 있도록 도와드리겠습니다.1. Exception을 클래스별로 생성하는 방식구현 방식예외를 처리하기 위해 특정 상황에 맞는 예외 클래스를 각각 정의하는 방식입니다. 예를 들어, 다음과 같은 예외 클래스를 작성할 수 있습니다:public class UserNotFoundException extends RuntimeException { public UserNotFoundException(String message) { super(message..

java 2024.12.20

Spring 디자인 패턴: 팩토리 메소드 패턴 vs 템플릿 메서드 패턴

토비의 스프링을 읽은 후 궁금한점을 기재하였습니다. Spring 프레임워크는 다양한 디자인 패턴을 활용하여 유연하고 확장 가능한 애플리케이션을 개발할 수 있도록 도와줍니다.그중 팩토리 메소드 패턴(Factory Method Pattern)과 템플릿 메서드 패턴(Template Method Pattern)은 자주 언급되는 패턴입니다.하지만 이 두 패턴은 목적과 활용 방식이 다르지만, 이해가 되지 않아서 서칭한 정보를 기재하였습니다.1. 팩토리 메소드 패턴 (Factory Method Pattern)정의팩토리 메소드 패턴은 객체의 생성 로직을 서브클래스에서 정의하도록 하여 객체 생성을 캡슐화하는 패턴입니다. 즉, 객체를 생성하는 책임을 서브클래스로 위임하여 클라이언트 코드가 특정 클래스에 의존하지 않도록 만..

Spring 2024.12.19

인터페이스 VS 추상 클래스

개발자라면 한 번쯤은 ‘인터페이스’와 ‘추상 클래스’에 대해 헷갈렸던 경험이 있을 것입니다. 둘 다 ‘추상화’라는 공통된 목표를 가지지만, 실제 사용 방식과 설계 철학에서는 큰 차이를 보입니다. 이번 글에서는 인터페이스와 추상 클래스의 차이점을 이해하기 쉽게 설명하고, 언제 어떤 것을 사용해야 할지에 대해 알아보겠습니다.추상 클래스란?추상 클래스는 ‘미완성 클래스’라고 할 수 있습니다. 이는 하나 이상의 추상 메서드(구현되지 않은 메서드)를 포함하며, 해당 클래스를 상속받는 하위 클래스에서 이 메서드를 반드시 구현해야 합니다. 하지만 단순히 추상 메서드만 포함할 수 있는 것이 아니라, 일반 메서드(구현된 메서드)와 상태(멤버 변수)도 가질 수 있다는 점에서 강력한 유연성을 제공합니다.특징하위 클래스와의 ..

java 2024.12.18

DAO의 개인적인 오해

DAO의 대해서 개인적인 오해를 하고 있었다이전 회사에서 진행한 프로젝트는 DAO를 마치 DTO처럼 사용하고 있었다.public class UserDao { private long userId; private String userName; private String email; private String password;}DB > DAO > DTO 순으로 데이터를 옮겨가며 사용하였고, 때문에 DAO는 그저 model이지만 db와 직접적으로 접근하는 객체로만 생각하고 있었다.하지만 토비의 스프링 책에서는 DAO를 model이 아닌 class로 정의하는 것을 보게되었다.public class UserDao { public long createUser(PostUserRe..

Spring 2024.12.17

DTO, VO의 개념

1. DTO (Data Transfer Object)DTO는 Data Transfer Object의 약자로, 계층 간(Controlelr, View, Business Layer) 데이터 교환을 위한 Java Bean를 의미한다. DTO는 로직을 가지지 않는 데이터 객체이고, getter, setter 메소드만 가진 클래스를 의미한다.예시@Getter@Setterpublic class GetUserRes { private long userId; private String userName; private String email; private String password;}2. VO (Value Object)VO는 Value Object의 약자로, Read-Only 속성을 가..

Spring 2024.12.17

코드 주석 추가 기능(Code Annotation) 소개

프로그래밍할 때, 가독성 높은 코드와 이를 쉽게 이해할 수 있는 주석 작성은 매우 중요합니다. 그러나 주석을 일일이 작성하는 일은 번거롭고 시간도 많이 소요됩니다. 이때 인공지능(AI)을 활용해 코드 주석을 자동으로 추가할 수 있는 기능을 사용하면 큰 도움이 됩니다.AI를 이용한 코드 주석 추가 기능은 개발자가 작성한 함수나 코드를 분석하고, 그 코드의 기능을 설명하는 문서를 자동으로 생성합니다. 특히 협업 중인 프로젝트에서 코드의 가독성을 높이고, 동료 개발자들이 쉽게 이해할 수 있도록 하는 데 유용합니다.코드 주석 추가 기능의 장점자동화된 주석 작성:반복적으로 발생하는 주석 작성 작업을 자동화할 수 있습니다. 이를 통해 코드 작성 후 필요한 설명을 빠르고 쉽게 생성할 수 있어 생산성을 높입니다.가독성..

AI 2024.10.14

감정 추론 기능 (Sentiment Analysis) 소개

감정 추론(Sentiment Analysis)은 인공지능이 주어진 텍스트에서 감정을 파악하고 분류하는 기술입니다. 텍스트의 내용을 분석해 그것이 긍정적(positive), 부정적(negative), 또는 중립적(neutral) 감정을 나타내는지 자동으로 판단합니다. 이 기능은 리뷰 분석, 고객 피드백 모니터링, 소셜 미디어 감정 분석 등 다양한 분야에서 활용될 수 있습니다.감정 추론 기능의 효과빠르고 정확한 감정 분석:AI를 활용한 감정 분석은 많은 양의 텍스트를 짧은 시간 안에 처리할 수 있어 효율적입니다. 수동으로 감정을 분석하는 데 드는 시간과 노력을 줄여주며, 동시에 높은 정확도를 제공합니다.고객 피드백 분석:비즈니스에서 감정 분석을 사용하면 고객의 의견, 리뷰, 문의 내용을 빠르게 분석해 감정 ..

AI 2024.10.14

[AI] ai 기초 Text Completion? Completion API?

Text Completion이란 무엇인가?Text Completion은 우리가 글을 쓰다가 멈추면, 컴퓨터가 그 다음 말을 이어서 예측하는 기능입니다. 이를 통해 우리가 더 빠르고 쉽게 글을 작성할 수 있습니다.예시:만약 "나는 오늘"이라는 문장을 컴퓨터에 입력하면, 컴퓨터는 그 문장의 흐름을 분석해 "학교에 갔다"거나 "친구를 만났다"처럼 문장을 완성할 수 있습니다. 컴퓨터는 수많은 데이터를 바탕으로 다음에 나올 가능성이 높은 단어나 문장을 예측하는 것입니다.비유로 설명:이 기능은 마치 우리가 친구와 대화를 하다가 그 친구가 갑자기 멈췄을 때, 그 다음 말을 추측해 이어서 말해주는 것과 같습니다. 예를 들어, 친구가 "어제 내가..."라고 말을 멈췄다면, 우리는 "어디 갔어?" 또는 "뭘 했어?"라고 ..

AI 2024.09.24

Controller vs Handler

1. 컨트롤러 (Controller)컨트롤러는 클라이언트의 요청을 받아 비즈니스 로직을 처리하고, 그 결과를 뷰(View)에 전달하는 역할을 하는 스프링 컴포넌트입니다. 스프링 MVC(Model-View-Controller) 구조에서 중요한 요소로, @Controller 어노테이션을 통해 클래스를 컨트롤러로 정의합니다.주요 기능요청 매핑 (Request Mapping): 특정 URL 요청을 매핑하여 적절한 메서드를 실행합니다. 예를 들어, /users로 들어오는 요청을 getUsers() 메서드로 연결할 수 있습니다.뷰 반환 (View Return): 비즈니스 로직 수행 후 결과를 모델(Model)에 담고, 반환할 뷰의 이름을 리턴합니다.모델 관리 (Model Management): 처리된 데이터를 Mo..

Spring 2024.08.29

spring - handler(핸들러)란 무엇인가?

handler(핸들러)는 "요청을 처리하는 자" 라는 의미로, 웹 애플리케이션이 클라이언트로부터 받은 HTTP 요청을 처리할 수 있는 모든 객체를 의미합니다. 쉽게 말해, 핸들러는 사용자가 웹 브라우저에서 요청을 보냈을 때, 그 요청을 받아 처리하는 역할을 맡는 "사람"이라고 생각할 수 있어요. spring 핸들러의 역할요청을 받는다: 클라이언트(예: 웹 브라우저)가 특정 페이지에 접근하거나 데이터를 서버에 요청할 때, 서버는 요청을 받아야 합니다.요청을 분석하고 처리한다: 핸들러는 요청의 내용을 확인하고, 그에 맞는 작업을 수행합니다. 예를 들어, 사용자가 로그인을 시도한다면, 핸들러는 해당 로그인 정보를 확인하고, 맞는지 검증하는 작업을 진행합니다.응답을 생성한다: 요청이 처리된 후, 핸들러는 사용자..

Spring 2024.08.29

파이썬 가상 환경 관리 도구: pipenv vs virtualenv

Python 프로젝트를 진행할 때, 각 프로젝트마다 독립적인 가상 환경을 설정하는 것이 좋습니다.이를 통해 패키지 간의 충돌을 방지하고, 프로젝트마다 다른 패키지 버전을 사용할 수 있습니다.파이썬에서 널리 사용되는 가상 환경 관리 도구로는 pipenv와 virtualenv가 있습니다. 이 두 도구의 차이점과 사용 방법을 알아보겠습니다.virtualenv란?virtualenv는 Python 프로젝트마다 독립적인 가상 환경을 만들어 주는 도구입니다.각 가상 환경은 독립된 Python 해석기와 패키지를 갖고 있어, 다른 프로젝트와의 패키지 충돌을 방지할 수 있습니다.virtualenv 설치 및 사용 방법설치MacOS에서는 Homebrew를 통해 virtualenv를 쉽게 설치할 수 있습니다.brew insta..

ETC 2024.08.22

쿠버네티스에서 HPA와 VPA를 동시에 사용하면 안 되는 이유

쿠버네티스는 자동화된 자원 관리를 통해 애플리케이션의 확장성과 안정성을 유지할 수 있는 다양한 기능을 제공합니다. 그중에서도 Horizontal Pod Autoscaler (HPA)와 Vertical Pod Autoscaler (VPA)는 각각의 역할에 따라 파드의 수와 리소스를 자동으로 조절해줍니다. 하지만 이 두 기능을 동시에 사용하면 예상치 못한 충돌이 발생할 수 있습니다. 이 블로그에서는 HPA와 VPA의 역할과 함께, 이들이 충돌하는 이유에 대해 알아보겠습니다.1. HPA와 VPA의 역할1.1. Horizontal Pod Autoscaler (HPA)HPA의 기능: HPA는 파드의 수를 자동으로 조절하는 기능입니다. 예를 들어, 애플리케이션의 CPU 사용량이 특정 임계치를 초과하면 HPA는 더 ..

[Mysql] Public key retrieval is not allowed 에러 해결

Mysql DB에 접속하려면 기본적으로 url, username, password 이 세 가지가 필요합니다.하지만 Mysql 8.0 버전부터는 보안적인 이슈로 useSSL 옵션에 대한 추가적인 설정이 필요해졌습니다.Public key retrieval is not allowed만약 사용하시는 DB가 Mysql 8.0 버전이고 public key retrieval is not allowed에러가 발생한다면 다음과 같은 옵션을 확인해보셔야합니다.useSSL: DB에 SSL로 연결allowPublicKeyRetrieval: 서버에서 RSA 공개키를 검색하거나 가져와야하는지에러 발생 원인에러가 발생하는 원인은 useSSL=false로 설정하고 allowPublicKeyRetrieval 설정을 하지 않은 경우입니..

DataBase 2024.08.09

쿠버네티스에서 QoS와 트래픽 손실 방지 방법

1. QoS (Quality of Service) 클래스쿠버네티스는 파드의 자원 요청 및 제한을 기반으로 세 가지 QoS 클래스를 제공합니다. 이는 자원 부족 시 파드를 효율적으로 회수하여 클러스터의 안정성을 유지하는 데 중요한 역할을 합니다.1.1. Guaranteed특징: 파드의 모든 컨테이너가 자원 요청과 제한을 동일하게 설정한 경우.우선순위: 가장 높은 우선순위로, 자원 부족 시 마지막으로 회수됨.1.2. Burstable특징: 파드의 일부 컨테이너만 자원 요청을 설정하거나, 요청과 제한이 다르게 설정된 경우.우선순위: 자원 사용량이 요청한 자원을 초과하는 파드부터 회수됨.1.3. BestEffort특징: 파드의 모든 컨테이너가 자원 요청과 제한을 설정하지 않은 경우.우선순위: 가장 낮은 우선순위..

JPA Could not write JSON: failed to lazily initialize a collection of role 에러 해결

개발 중, Database 설정을 통해 DB 값을 가져오는 과정에서 다음과 같은 오류를 경험했습니다에러내용 :JPA Could not write JSON: failed to lazily initialize a collection of role상황 설명저는 두 개의 Database를 연결하여 사용하는 환경에서 작업하고 있었습니다. 그런데 Sub Database의 값을 가져오는 과정에서 위와 같은 오류가 발생했습니다.JPA를 사용중이었는데 연결된 table 의 정보를 가지고 올 때 @OneToMany(fetch = FetchType.LAZY) 옵션이 문제가 되었습니다.추측 원인개인적으로는 Sub Database를 사용하는 경우, EntityManager가 유지되지 않아 LAZY 옵션이 유효하지 않았던 것으로..

Spring 2024.04.04
반응형