본문 바로가기

전체 글

(201)
객체지향의 사실과 오해 (이상한 나라의 객체) 객체지향은 세상을 자율적이고 독립적인 객체들로 분해할 수 있는 인간의 기본적인 인지 능력을 기반으로 두고 있다. 객체지향과 인지 능력 인간은 직접적으로 지각할 수 있는 대부분의 객체는 물리적인 경계를 지닌 구체적인 사물이다. 그러나 인간의 인지 능력은 물리적인 한계를 넘어 추상적인 사물까지도 객체로 인식할 수 있다. 거래라는 객체는 물리적으로는 존재하지는 않지만 인간이 쉽게 구분하고 하나의 단위로 인지할 수 있는 개념적인 객체의 일종이다. 즉 객체란 인간이 분명하게 인지하고 구별할 수 있는 물리적인 또는 개념적인 경계를 지닌 어떤 것이다. 객체지향의의 목적은 현실 세계를 모방하는 것이 아닌 현실 세계를 기반으로 한 새로운 세계를 기반으로 새로운 세계를 창조하는 것이다. 따라서 소프트웨어 세계에서 살아가는..
객체지향의 사실과 오해 (협력하는 객체들) 객체지향의 목표는 실세계를 모방하는 것이 아니다. 오히려 새로운 세계를 창조하는 것이다. 01. 협력하는 객체들의 공동체 객체지향에 대한 오해 흔히들 객체지향을 현실 속에 존재하는 사물을 최대한 유사하게 모방해 소프트웨어 내부로 옮겨오는 작업으로 여겨 객체란 현실 세계에 존재하는 사물에 대한 추상화라고 생각하는 사람들이 많을 것이다. 하지만 이는 객체지향의 철학적인 개념을 설명하는 데는 적합하지만 실용적인 관점에서는 적합하지 않다. 실세계에서는 메뉴판은 그저 메뉴가 적혀 있는 것에 불과하지만 객체지향의 세계에서는 생명을 가진 생명체 처럼 자기 스스로 메뉴 항목을 찾을 수도 있다. 사실상 소프트웨어 객체와 실세계 사물 사이에 존재하는 연관성은 희미하다고 할 수 있다. 객체의 역할과 책임 여러 객체가 동일한..
Refresh Token 구현하기 2 이전 이야기 저번글에 Refresh Token을 구현할 때 클라이언트 쪽에서 SetInterval을 통해서 30분마다 AccessToken을 요청하는 로직을 만들어서 RefreshToken을 구현을 했었는데 이 방법은 보안상 으로도 취약하고 클라이언트 쪽에 별도의 로직을 만들어야 하는 문제점이 있는 방식이다. 이번에는 이 문제를 보완하기 위한 서버에서 AccessToken의 유효기간을 체크하고 RefreshToken을 통해서 AccessToken을 발급하는 과정을 거쳐서 Refresh Token을 구현해 보도록 하겠다. 고민 점 🤔 ※ 서버에서 유효성을 검사하면 AccessToken을 사용하는 모든 Service로직에서 엄청난 중복 코드가 발생하게 된다. AccessToken의 유효성을 검사하는 로직을 ..
Refresh Token 구현하기 1. JWT토큰의 문제점 현재 본인의 프로젝트에는 인증, 인가 처리를 JWT의 accessToken만을 사용해서 하고 있다. 하지만 accessToken에 만료기간을 설정하지 않고 그냥 사용하고 있는데 이는 본안적으로 굉장히 치명적일 수 없다. 토큰을 획득한 사람은 누구나 접근 권한이 생기기 때문이다. JWT는 발급한 후 삭제가 불가능하기 떄문에 일반적으로 토큰에 유효시간을 부여하는 식으로 탈취 문제에 대해서 대응을 한다. 토큰의 유효기간을 짧게하면 토큰 남용을 방지하는 것의 해결책이 될 수 있지만 유효기간이 짧은 Token의 경우에 클라이언트가 그 만큼 로그인을 자주 해서 새롭게 Token을 발급받아야 하므로 불편하다는 단점이 있다. 그렇다고 토큰의 유효기간을 늘리면 토큰을 탈취당했을 때 보안에 취약해..
Spring REST Docs로 APIDocs 자동화 하기 백엔드와 프론트엔드의 원활한 협업을 위해서는 REST API명세에 대한 문서화가 잘 되어 있어야 할 것이다. 구글 독스, 노션 등을 사용해서 직접 사용할 수 있지만 API문서 작성을 도와주는 자동화 도구들이 많이 개발되어 있으니 사용해 보도록 하자. 먼저 APIDocs가 무엇인지 부터 ARABOZA APIDocs란? API Docs(documents)는 API 사용 방법을 사용자에게 알려주는 문서이다. 본인 같은 경우 프로젝트를 할 떄 카카오 로그인이나, 카카오 페이 API를 사용을 했는데 카카오의 공식문서를 참고하여 구현을 했는데 그 공식문서도 일종의 APIDocs로도 구분을 할 수 있는 것 같다. 이렇듯 정보들을 제공해주는 문서가 잘 설명되어 있어야 사용자들이 API를 잘 사용할 수 있다. 요청 UR..
Jenkins로 CI구축하기 part 2 앞서 part 1 에서는 CI와 Jenkins, 도커를 사용해서 Jenkins를 설치하는 과정을 알아 보았다. 이번 part2는 본격적으로 CI의 구축 과정을 다뤄보려고 한다. Backend에 CI구축 1. Jenkins Item 젠킨스에서 하나의 CI/CD 프로젝트를 구축하기 위해서는 아이템(Item)을 생성하여야 한다. 젠킨스 서버에 여러개의 아이템을 만들 수 있고 각각의 아이템들은 개발자가 설정하는 것에 따라 다르게 동작한다. 젠킨스에서 아이템을 만드는 방법은 대표적으로 FreeStyle과 Pipeline이 존재한다. 먼저 이 두가지에 대해서 알아보자 FreeStyle VS Pipeline Pipeline Pipeline은 스크립트 언어인 Groovy문법을 통해서 디테일한 일련의 작업들의 순서와 흐..
Jenkins로 CI 적용하기 part 1 이 글을 끝까지 읽으면 얻을 수 있는 이득 1. CI란 무엇인가 왜 필요한 것인지 2. 젠킨스는 무엇인지 3. Docker를 이용해서 Jenkins설치하기 CI(Continuous Integration)란 무엇인가? CI란 팀의 구성원들이 작업한 내용을 레파지토리에 정기적으로 통합하는 것을 의미한다. 하나의 프로젝트를 여러 명으로 구성된 한 팀이 작업을 하게 되고 분업과 협업을 하는 과정에서 각각의 할당된 작업이 있을 것이다. 팀원은 본인이 작업한 내용을 GIT, SVN같은 버전 관리 시스템에 Sunmit하게 되는데 이렇게 submit된 소스코드들을 정기적으로 통합하는 것을 CI라고 하고 이것을 시행시켜주는 서버를 CI Tool이라고 한다. 젠킨스 또한 CI Tool에 속한다. CI 시스템을 구축하지 않..
JPA 영속성 컨텍스트 오늘은 이전 프로젝트 진행할 때 실시간 알림 구현중 OSIV 때문에 connection이 반환되지 않아 문제가 발생했던 적이 있었는데 해당 문제가 왜 발생했는지 알아보기 위해 2번의 포스팅(영속성 컨텍스트, 지연로딩과 OSIV)을 통해 알아보려고 한다. 우선 최종 목표인 OSIV에 대한 간단한 정의부터 살펴보자. OSIV(Open-Session-In-View)란? OSIV는 영속성 컨텍스트를 뷰까지 열어준다는 의미이다. 영속성 컨텍스트가 살아있으면 엔티티는 영속 상태로 유지된다. 따라서 뷰에서도 지연 로딩을 사용할 수 있다고 한다. 오늘은 지연로딩에 대해 공부하기 이전에 영속성 컨텍스트부터 알아보자. 영속성 컨텍스트란? 영속성 컨텍스트는 엔티티를 영구 저장하는 환경을 말한다. 간단히 말하면 엔티티를 저장..