전체 글 82

[스마일게이트 캠프] 실시간 채팅 구현하기 - Web Socket

이해 용도로 작성해서 보충 예정입니다 채팅 서버 스마일게이트 윈터 데브 캠프에서 나는 인증 서버와 채팅 서버를 맡았다! 인증 서버를 끝내고 채팅 서버를 구현할 차례인데, 일단 내용 파악을 해야겠다. Web Socket 서버는 늘 수동적인 입장이였다. 서버도 능동적이게 행동할 수 있게 만든게 웹소켓! 인터넷이 나오고 HTTP를 통해서 서버로부터 데이터를 가져오기 위해서는 오로지 URL을 통한 요청이 유일한 방법이었다. 매번 요청을 해야 서버가 응답할 수 있었다. 2014년 10월 28일의 HTML5 버전이 나올 때 함께 등장한 웹소켓. 웹소켓에서는 서버와 브라우저 사이에 양방향 소통이 가능하다. 브라우저는 서버가 직접 보내는 데이터를 받아들일 수 있고, 사용자가 다른 웹사이트로 이동하지 않아도 최신 데이터..

어떤 비밀번호 알고리즘을 써야 할까?

Password Encryption 회원가입 인증 시스템을 구현할 때 우리는 비밀번호를 입력한 뒤 해쉬화된 비밀번호를 DB에 저장해야할 필요가 있다.이때 어떤 알고리즘을 선택할지에 대한 고민이 생겼다. 단방향 해쉬함수의 문제점 대부분의 웹 사이트에서는 SHA-256과 같은 해시 함수를 사용해 패스워드를 암호화해 저장하고 값을 비교하는 것만으로 충분한 암호화 메커니즘을 적용했다고 생각하지만, 실제로는 다음과 같은 두 가지 문제점이 있다. 인식 가능성(recognizability) 동일한 메시지가 언제나 동일한 결과(다이제스트) 를 갖는다면, 공격자가 전처리(pre-computing)된 다이제스트를 가능한 한 많이 확보한 다음 이를 탈취한 다이제스트와 비교해 원본 메시지를 찾아내거나 동일한 효과의 메시지를 ..

Spring Security - (1) Authentication

Authentication 스마일게이트 윈터 데브 캠프 개인 프로젝트가 시작되었다. 인증 시스템을 구축하는 게 과제이다. 정말 다 뜯어볼 생각이다. 그래서 Spring Docs와 여러 블로그를 보며 내가 이해한 토대로 작성해보겠다. 구조 1. Authentication Filter AuthenticationFilter(사용할 구현체 UsernamePasswordAuthenticationFilter)가 HttpServletRequest에서 사용자가 보낸 아이디와 패스워드를 인터셉트한다. Request안에서 username 과 password를 기반으로 Token을 생성해준다. 실제 코드를 보면 다음과 같다. Token이 과연 무엇인가? @Override public Authentication attempt..

[객체 지향의 사실과 오해] 6. 객체지도

객체 지도 이번 장은 좀 어려웠다. 사실 컴퓨터 전공이 아니라 보안 전공이라 유스 케이스 같은 전공을 들을 기회가 없어서인지, 배우는 게 많았지만 시간이 오래 걸렸다. 그래도 두세 번 읽으니깐 이해할 수 있었다. 구조적 설계를 해야한다. 객체지향은 자주 변경되는 기능이 아니라 안정적인 구조를 기반으로 시스템을 구조화한다. 구조 측면의 설계는 제품의 형태가 어떠해야 하는지에 초점을 맞춘다. 설계의 가장 큰 도전은 기능과 구조라는 측면을 함께 녹여 조화를 이루도록 만드는 것 훌륭한 구조 -> 훌룡한 기능 -> 훌룡한 소프트웨어 요구사항은 늘 변경되기 때문에 안정적인 구조를 제공하는 능력을 갖추어야 한다. 훌륭한 설계 = 안정적인 구조를 중심으로 설계 길을 묻지 마라, 객체를 이용해 지도를 만들어라 자연스럽게..

도서 2022.11.30

[TDD,클린코드 with JAVA] 자동차 경주 피드백 모음

자동차 경주 피드백 모음 next-step/java-racingcar at sienna011022 (github.com) GitHub - next-step/java-racingcar: 자동차 경주용 게임을 관리하는 저장소 자동차 경주용 게임을 관리하는 저장소. Contribute to next-step/java-racingcar development by creating an account on GitHub. github.com 넥스트 스텝 15기 클린 코드를 수강하며 정리하는 글입니다. 넥스트 스텝에 참여하며 [자동차 경주]를 시작으로 처음 리뷰를 받았고 , OOP가 뭔지 모르는 무지의 상태에서 첫 시작을 도와주신 리뷰어님께 아주아주 감사한 자동차 경주 교육이었다 :) 이때의 나와 지금의 나는 정말 2..

참조타입보다는 기본타입을 사용하자

Integer사용을 지양하라고? 자동차 경주 피드백 중에 Integer사용보다 int를 사용하라는 리뷰를 받았다. 왜인지 알아보자 기본 타입? 참조 타입? 기본 타입(Primitive Type) vs 참조 타입(reference Type)으로 구분할 수 있다. 기본 타입 int long short double char boolean 참조타입 String Integer Long Double Boolean 기본타입 vs 참조타입 1) 기본 타입은 값만 가지고 있다 vs 참조 타입은 값 + 식별성이라는 속성을 갖는다. 2) 기본 타입의 값은 JVM내의 Stack메모리에 저장 vs 참조 타입의 값은 객체 내의 상수에 저장된다. 따라서 JVM내의 Heap메모리에 저장된다 + 기본 타입은 Literal이다. Lit..

Entity <-> DTO 빌더 로직은 어디에 넣어야할까??

객체지향을 신경 쓰며 개발하다 보니, get을 쓰게 되면 이게 맞나.. 고민하고 이 메서드가 이 객체에게 책임이 있는가.. 쓰이는 게 맞나.. 고민하게 된다. 지금 닥친 문제는 Builder에서 나타난다. 고민사항 우리는 서비스와 controller에 Entity를 주고 받지 않고 , DTO를 사용한다. 그렇다면 보통 Entity를 DTO로 변환하는 과정이 추가되는데 이 과정에서 보통 Builder를 사용한다. 다음과 같은 세 가지 버전이 있을 것 같다. 서비스에 Builder가 나타난 ver 서비스 안에 builder가 보이는 로직인데 , 이는 중복 코드도 많아지고, service에 트랜잭션 순서만 드러나야지 이렇게 메서드가 들어가는 건 지양해야 할 듯싶어서 객체에게 메서드로 빼고 싶었다. @Trans..

연관관계에 관한 다양한 생각들(+지양해야할것)

ManyToOne 현재 인사 내역 하나당 여러명의 사람이 평가할 수 있게끔하는 서비스를 개발하고 싶다. 즉 1:N의 상황으로 객체 연관관계를 구성해야한다. 그냥 개발하지말고 why를 물으며 개발하기 위해 포스팅해보자 객체의 연관 관계 객체는 객체를 참조하여 연관된 객체를 찾는다. 초반에 가장 헷갈렸던 개념인것 같다.외래키가 왜 없지?하던 시절이 있었다. JPA에서는 상대방의 PK를 멤버 변수로 갖지 않고 엔티티 객체 자체를 통째로 참조한다 단방향 vs 양방향 그리고 다중성 단방향 : 두 엔티티가 관계를 맺을 때, 한쪽의 엔티티만 참조하는 것을 의미한다. 양방향 : 양쪽이 서로 참조하는 것을 의미한다. 데이터 모델링에서는 자동으로 양방향 관계 매핑이 되지만, 객체지향 모델링에서는 구현하고자 하는 서비스에 ..

JPA 2022.11.17

[객체지향의 사실과 오해] 5장 책임과 메세지

책임과 메시지 책을 읽고 개인적으로 받아들인 내용을 정리하는 공간이라 틀린 점이 있을 수 있습니다. 언제나 틀린 부분에 대한 논의는 환영합니다 !! 자율적인 책임 자율성 : 자기 스스로의 원칙에 따라 어떤 일을 하거나 자신을 통제해서 절제하는 성질이나 특성. 요청을 해결하기 위하여 객체가 수행하는 내용 = 책임 객체에게 주어지는 책임은 자율적이 여야 한다(알아서 처리하도록 내버려두어야 한다) 적절한 책임이 자율적인 객체를 낳고 , 자율적인 객체들이 모여 유연하고 단순한 협력을 낳는다 자율적이지 못하다? 예를 들어 왕이 모자장수에게 단순히 증언하세요! 가 아닌 목격했던 장면을 떠올리고 , 행동과 함께 증언하세요 이런 식으로 왈가왈부하면 모자장수 입장에서는 화날 듯!! 자율적이지 못하니깐. 알아서 증언하라 ..

도서 2022.11.17

[JAVA] immutable 객체?방어적 복사?

immutable 객체?방어적 복사? immutable한 객체...?? 클린코드 교육을 들으며 정말 많이 들었지만 무언가 겉핥기로 아는 것 같아서 정리해보려고 한다!!!! Immuable object 정의 객체 지향 프로그래밍에 있어서 불변객체(immutable object)는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 반대 개념으로는 가변(mutable) 객체로 생성 후에도 상태를 변경할 수 있다. 객체 전체가 불변인 것도 있고, C++에서 const 데이터 멤버를 사용하는 경우와 같이 일부 속성만 불변인 것도 있다. 또, 경우에 따라서는 내부에서 사용하는 속성이 변화해도 외부에서 그 객체의 상태가 변하지 않은 것 처럼 보인다면 불변 객체로 보기도 한다. 예를 들어, 비용이 큰 계산의 결과를 캐..

728x90