전체 글

하루하루 재밌게 배웠던 내용을 기록하는 블로그입니다
Spring

DispatcherServlet 알아보기 - ServletConfig 편

전 글은 여기 있습니다. 저번에는 Aware 인터페이스에 대해서 알아보았는데요 오늘은 ServletConfig와 Servlet 이 실행되는 환경인 ServletContext 부분을 알아볼 예정입니다 ServletConfig 인터페이스 이 인터페이스는 초기화 단계에서 서블릿에 대한 정보를 반환해 주는 인터페이스입니다. public interface ServletConfig { public String getServletName(); public ServletContext getServletContext(); public String getInitParameter(String name); public Enumeration getInitParameterNames(); } servlet의 이름, servletC..

Spring

DispatcherServlet 알아보기 - Aware 편

왜 이 글을 쓰게 되었나요? 생각보다 Spring 이 너무 복잡해서, 한 번쯤 제대로 알아봐야겠다는 생각을 하고 기초부터 알아봐야겠다는 생각을 가지고 진행하게 되었습니다 DispatcherServlet을 밑바닥부터 하나하나 뜯어가면서 배워볼 예정입니다 DispatcherServlet의 계층 구조 DispatcherServlet 은 아래와 같은 상속 관계를 가지고 있습니다 여기서 가장 쉬운 것부터 시작해보도록 하겠습니다. Aware 인터페이스 /** * A marker superinterface indicating that a bean is eligible to be notified by the * Spring container of a particular framework object through a ..

Spring

모든 객체를 스프링 빈으로 등록해도 괜찮나?

chat gpt 를 질문해본 결과 시간 측정 모든 bean 시작을 lazy 하게 했을 때 spring: main: lazy-initialization: true 이정도의 차이가 났습니다. 이런 부분을 생각했을 때, 모든 것들을 등록하는 것은 생각보다 유의미한 성능 차이가 날 수 있다고 생각이 듭니다 bean 을 등록한다는 것은 spring 의 lifecycle 을 따라간다는 것이고, 생성시 생성자에 있어야 할 객체들이 생성되어야 합니다. 미리 생성하지 않는다면, 메서드 파라미터로 다 넘겨야 되는데, 코드 구조상으로도 악영향을 끼칠 수 있어보입니다

프로젝트

이펙티브 기술면접 서비스 회고

여기에서 코드를 보실 수 있습니다 https://effective-tech-interview.com/ 이펙티브 기술면접 Chat GPT로 연습하는 개발자 면접! 프론트엔드, 백엔드 면접 막막하다면, 10초만에 맞춤 질문 뽑아드려요. 답변이 어려운 꼬리 질문까지 한번에! effective-tech-interview.com 프로젝트를 하는 동아리 "디프만"에서 만난 사람들끼리 해커톤을 나가게 되면서 프로젝트를 시작했습니다 해커톤에서 우수상을 받고, 프로젝트 개발을 이어서 진행하고 있었습니다 개발을 위한 개발을 하면 안된다는 생각을 정말 확실하게 갖게 되었는데요 이 프로젝트에서 후회가 되는 부분은 회원가입입니다 오늘은 회원가입에 대한 이야기를 하려고 합니다 저희 서비스는 1. 앱을 실행하면, 회원가입이 바로 ..

프로그래밍 방법

명확한 판단 근거를 만들자(feat: chatgpt)

요즘 코파일럿을 통해서 코딩을 2개월정도 해보았는데요 처음에는 좋았고, 무서워지고, 고민을 하게 되었습니다 앞으로 대부분의 일들은 인공지능이 할 수 있을 것 같아보입니다 실제로 반복 작업의 경우 거의 대부분의 시간을 줄여줄 수 있었습니다 주변 문맥들을 이해해서 작성해야 한다거나, 복잡도가 생기면 완벽하지 않은 결과를 만들어 주기도 하고 예전 버전의 코드들이 섞여있어서 제대로 원하는 결과를 얻지 못하는 경우도 많았습니다 코드의 퀄리티나 사후 체킹에 대한 과정이 필요하기도 합니다 단순 작업에 대한 시간이 없어지기에, 효율은 엄청나게 늘어나고, 이 부분을 잘 활용하는 것은 정말 중요해보였습니다 코파일럿같은 AI 도구들을 잘 활용하기 위해서는 어떤 방법이 필요할까요? AI 가 해줄 수 없는 부분을 해주는 역할이..

우아한테크코스

우아한테크코스 레벨1 레벨로그 준비

레벨 1을 진행하면서 공부 및 경험한 것 Exception 자바 Exception 의 계층 구조 Throwable -> Exception -> RuntimeException Throwable -> Error Error 은 사용자가 정상적인 경우에는 복구가 불가능하다 CheckedException vs UncheckedException Throwable 의 하위클래스 중 Error 나 RuntimeException 을 상속하지 않는 경우가 다 Checked Exception 이다. Error 나 RuntimeException 의 하위 클래스에서는 UncheckedException 이다 Exception 이 성능에 안좋은 이유 Throwable 의 생성자를 확인해보면 무조건 StackTrace 를 전부 채우..

Java

reflection 을 주의해서 사용해야 하는 이유

리플렉션에 대해 공부하던 중 갑자기 궁금한 점이 생겼습니다. final 키워드가 붙은 곳도 변경이 가능하다는 점인데요 이를 실제로 변경하게 되면 어떤 결과가 나올까요? https://stackoverflow.com/questions/3301635/change-private-static-final-field-using-java-reflection public class EverythingIsTrue { static void setFinalStatic(Field field, Object newValue) throws Exception { field.setAccessible(true); Field modifiersField = Field.class.getDeclaredField("modifiers"); mod..

우아한테크코스

다른 사람의 리뷰를 훔치자

우아한테크코스의 진행 방법 우아한테크코스를 하게 되면 매주 미션이 주어지고, 그 미션을 혼자서, 혹은 페어랑 같이 진행하게 된다 각 미션에 대해서 리뷰어에게 피드백을 받을 수 있고, 질문을 받을 수 있다 더 다양하고, 깊은 리뷰를 받기 힘들다는 문제점 미션에 대한 최대한 많은 피드백을 받아보고 싶어도, 리뷰어에 시간이 한정되어있기에, 받을 수 없다 나만의 해결책 이를 해결하기 위한 나만의 방법으로 다른 사람들의 리뷰를 보는 시간을 갖곤 한다 각 미션별로 최소 50~60명정도의 리뷰를 보고 나면, 그 미션에 대한 공통적인 피드백도 눈에 들어오기도 하고, 저렇게 짜야되는구나 싶은 느낌이 드는 크루도 생기곤 한다 리뷰를 보고 나면 기억에 남는 리뷰들이 생기곤 하는데, 그 리뷰들을 나만의 저장 공간에 모아두려고..

Java

Stream collect 알아보기

Collector 인터페이스는 collect 함수를 사용할 때 넣어줘야 하는 객체인데요 public interface Collector { /** * A function that creates and returns a new mutable result container. * * @return a function which returns a new, mutable result container */ Supplier supplier(); /** * A function that folds a value into a mutable result container. * * @return a function which folds a value into a mutable result container */ BiCons..

Spring

잘못된 타입이 클라이언트로부터 왔을 때 커스텀 메시지 보여주기

클라이언트에서 Body를 잘못 보냈을 때, 필드 네임이 담긴 메시지를 보내보자 public record AuthenticateEmailRequest( @Email(message = "올바른 이메일을 입력해주세요.") @NotBlank(message = "이메일 입력은 필수입니다.") String email, @Range(min = 100000, max = 999999, message = "6자리 숫자를 입력해주세요.") Integer verificationCode ) { } public void authenticateEmailForSignup(@RequestBody @Valid AuthenticateEmailRequest request) { emailAuthService.authenticateEmailF..

be-student
재미로 기록하자