분류 전체보기
[Spring MVC] DispatcherServlet은 어떻게 request랑 controller를 이어줄까?
DispatcherServlet는 HandlerMapping이라는 중요한 역할을 해준다. HandlerMapping이란 request와 이에 맞는 RequestController를 이어주는 역할을 하는데 어떻게 이어주는지 내부 구조가 궁금해졌다. 먼저 Dispatcher의 변수 선언을 보면 public class DispatcherServlet extends FrameworkServlet { ... @Nullable ... private boolean detectAllHandlerMappings = true; ... ... } 다음과 같이 detectAllHandlerMappings라는 부분이 있다. 해당 플래그가 세워지고 아래 함수가 호출이 되는데 해당 함수에서 BeanFactoryUtils에서 bea..
[Spring JPA] ORM과 JPA
[Spring JPA] ORM과 JPA Status: Done ✨ ORM이란? ORM은 객체와 DB 테이블이 매핑을 이루는 것을 의미한다. 즉, 내가 코드 상에서 생성한 객체가 DB상에 어떤 테이블과 연결이 된다는 것을 의미한다. 이렇게 되면 내가 객체를 조작함으로써 DB를 조작할 수 있게 된다. 이러한 예시로 우리는 JPA를 떠올릴 수 있다. 우리는 JPA에서 DB에 대한 접근을 시도할 때 직접 sql 쿼리문을 만들지 않는다. 다만 객체를 이용한 메소드를 통해 이를 관리할 뿐이다. 예시를 보자 SELECT * FROM user → user.findAll() 해당 예시는 user라는 테이블에 모든 정보를 가져오는 것인데 우리는 이를 user라는 객체와 user테이블을 맵핑한 후 findAll이라는 메소드..
[Spring] Controller request 유효성 검사
Request 유효성 검사 서버는 client로 부터 값을 받아서 사용할 때 client로 받은 정보가 서버에서 원하는 형식 혹은 값의 조건에 맞는지 검사를 해야한다. 이를 유효성 검사라고 한다. 이러한 유효성 검사는 class내에 method를 사용하여 검사를 진행했었다. 하지만 유효성 검사는 dto마다 동일하게 혹은 비슷하게 적용 될 수 있고 이에 따라 전체적인 코드 내에서 유효성 검사가 이뤄지는 곳이 여러 Controller에 산재할 수 있다. 따라서 Spring에서는 제약 조건이 부여된 객체에 대해 빈 검증기(Bean Validator)를 이용해서 검증하도록 해주는 어노테이션이 존재한다. 이번에는 이에 대해 정리하려고 한다. BeanValidation 우리가 사용하는 dto에는 원하는 형식이 존재..
웹 서버와 WAS
웹서버의 정의 웹 브라우저와 같은 클라이언트로부터 HTTP 요청을 받아들이고, HTML 문서와 같은 웹 페이지를 반환하는 컴퓨터 프로그램 역할 기본적으로 클라이언트의 HTTP통신에 대한 처리를 담담하는 서버로 생각이 든다. 이 때문에 GET같은 HTTP request가 들어온다면 이에 대응되는 정보를 반환해준다. 예를 들어 사용자가 특정 웹페이지에 접속하여 해당 웹페이지의 HTML을 보기를 원한다면 해당 웹페이지에 대한 정보를 웹서버가 받아서 이에 해당하는 HTML을 사용자에게 전달할 것이다. 이때 웹서버는 클라이언트와 여러개의 connection을 만들어 여러 정보(HTML 템플릿, 이미지, 기타 데이터)등을 병렬적으로 전송하게 된다. 또한 POST나 PUT등과 같이 서버에 어떤 정보를 전달하는 클라이..
오버라이딩 vs 오버로딩
오버라이딩 정의 오버 라이딩이란 자식 클래스가 부모 클래스의 메소드를 상속 받은 후 해당 메소드들에 대한 수정을 진행 하는 것을 의미한다. 해당 과정에서 기존에 부모 클래스가 사용하던 메소드들이 가지는 input의 갯수와 데이터 타입들은 자식 클래스 에서도 동일하게 적용되어 질 때 오버라이딩이라고 불려진다. 오버로딩 정의 오버 로딩이란 같은 클래스 내에 메소드 이름이 인수가 다른 경우 중복을 허용하는 것을 의미한다. Q) 왜 필요한가 만약 상속받은 메소드가 자식클래스에서는 받는 인수마다 처리하는 과정이 다르다고 가정한다면 인수가 어떤 것이냐에 따라 메소드의 이름이 다수 생성될 것이다. 이는 중복되는 코드가 다수 생길 수 있습니다. 따라서 이를 방지하고자 오버로딩이 필요한것이다. 오버라이딩 vs 오버로딩 ..
상속과 다형성
Intro 상속과 다형성은 객체 지향을 공부하게 되면 항상 만나게 되지만 깊이 생각을 하지 않고 넘어가는 경우가 많았던거 같다. 그래서 이번 기회에 상속과 다형성은 왜 쓰이는지에 초점을 맞춰서 공부를 해보았고 그거에 대한 정리를 남기려고 한다. 상속 정의 이미 만들어져 있는 클래스를 부모 클래스라고 할때 해당 부모 클래스의 기능을 사용가능 하도록 해당 클래스의 기능을 받아오는 것을 상속이라고 하고 이로 인해 만들어지는 클래스를 자식 클래스라고 한다. 왜 사용할까? 1. 코드의 재활용 새로운 클래스를 만들 때 이미 다른 클래스에서 새롭게 만들 클래스에 필요한 메소드를 다수 가지고 있을 때 새로운 클래스는 이미 만들어져있는 클래스에 대하여 상속 받아 사용하게 된다면 기존 코드를 재활용 할 수 있고 코드도 간..
Off-Policy Deep Reinforcement Learning without Exploration 리뷰
강화학습은 정말 매력적인 분야이다. 못 걷던 로봇을 걷게 하고, 로봇이 물체를 알아서 집게하고, 사람보다 게임을 더 잘하게 되고 심지어 자동차도 스스로 굴러가게 학습 시킬 수 있다. 그렇다면 이러한 강화학습이 지도학습에 비해서 널리 쓰이지 못하는 이유가 무엇일까? Sergey Levine 교수님의 설명을 빌리자면 “The fact that reinforcement learning algorithm provide a fundamentall online learning paradigm is also one of the biggest obastacles to their widespread adoption” 라는 것이다. 즉, 우리가 강화학습은 online learning의 성격이 강해서 이를 실제 환경에 적용..
[강화학습] A2C
이번에 중간고사를 지나면서 시간이 상당히 오래되었지만 A2C에 대해 리뷰하려고 합니다. 먼저 앞에서 배웠던 DQN과 Policy gradient의 차이를 먼저 짚고 넘어가면 좋을거 같네요. 강화학습에서 최종 목표는 항상 Agent가 Reward를 최대한 많이 받도록 하는 것입니다. DQN은 여기서 Q-function, 즉, 행동가치함수를 추정해서 이를 통해 최대해 행동가치를 가질 수 있는 행동을 선택하도록 한다. 하지만 만약 우리의 action이 continuous하다면? 즉, 선택지가 너무 많아서 이를 가치함수의 가짓수로 나타내기 힘들다면 어떻게 해야할까? 물론 DQN과 AC계열의 차이는 이 한가지 문장으로 표현하기 어렵겠지만 제가 느끼기로는 이게 AC로 진입하게 되는 진입문을 잘 표현한 것 같습니다...