본문 바로가기

분류 전체보기

(82)
[lab intern] AddressSanitizer Paper Review 저번주에 읽었던 "SoK: Santizing for Security" 논문은 지금껏 연구됐던 세니타이저들에 대한 리뷰 논문이었다. 이 논문에서 상용화된 기술로 가장 많이 언급되는 새니타이저가 AddressSanitizer(이하 ASan)이다. 그래서 이 도구의 구체적인 부분이 궁금해져 ASan 논문을 찾아 읽게 되었다. ASan 알고리즘 및 구현을 위주로 정리하였다. Introduction "coverage와 performance는 trade-off 하다" 이전까지 연구됐던 모든 새니터이저들이 직면했던 문제이다. 즉, 높은 커버지리를 보이는 새니타이저는 느리고, 반대로 빠른 새니타이저는 커버지리가 빈약하다. 그래서 이러한 트레이드오프를 극복하고자 나온 새로운 새니타이저가 ASan이다. ASan의 가장 기..
[Git] rejected-not-fast-forward 에러 해결 커밋 후 깃헙 레파지토리에 올리려고 git push 를 실행하니 아래와 같은 오류가 발생하였습니다. To https://github.com/ChoiJangSeop/tokyo-subway-database.git ! [rejected] main -> main (non-fast-forward) [rejected] non-fast-forward 의 원인 이 오류는 원격 레파지토리와 로컬 레파지토리의 공통 사항이 없어서 발생하는 것이다. 나의 경우는 git push 수행 전에 git commit --amend 를 수행하였는데 이때 원격(origin/main)과 로컬(main) 사이의 충돌이 발생한듯 하다. 해결 결국 브랜치(branch)들 간의 충돌이 일어난 것이므로 두 브랜치를 병합(merge)하여 병합 충돌(..
JWT(Json Web Token)의 구조 JWT는 String 타입의 사용자를 식별하는 토큰 xxxxx.yyyyyy.zzzz... 위와 같이 점(.)으로 구분된 3개의 문자열이 합쳐진 하나의 문자열 형태임. 3개의 문자열은 각각 Header Payload Signature Header 토큰의 타입과 해시 암호화 알고리즘을 포함하고 있음 Payload 토큰의 정보인 Claim을 기술하고 있음. Claim에 대한 자세한 설명은 아래애... Signature 시크릿 키(Secret Key)를 포함하여 암호화한다. 토큰의 정보(Header, Payload)가 신뢰할 수 있는 정보인지를 판단할때 사용 Claim이란? 토큰의 정보로 3가지로 분류됨 Registered Claim Public Claim Private Claim Registered Claim..
5. 클라이언트 배포 회고 (feat. hot-reload) 지금까지 한일 핵심 기능 (BE, 아이템 지급 / 닉네임 변경) 개발 웹페이지(front-end) 개발 인증(Authentication / Authorization) 기능 개발 테스트 데이터베이스 환경에서 서비스 테스트 서버 배포 조금 문제가 있긴 했지만, 임시로 서버 배포까지 마쳤습니다. 이제 클라이언트 프로그램을 배포하여 사용자가 클라이언트 서비스를 사용할 수 있게 해야 합니다. 클라이언트 서비스를 배포하는 방법은 여러개가 있을 수 있습니다. 커멘드 라인 인터페이스 데스트톱 애플리케이션 웹 페이지 등등등... 최초 개발시부터 클라이언트 프로그램은 데스크탑 애플리케이션으로 개발할 계획이었습니다. 데스크톱 애플리케이션으로 개발하려던 가장 큰 이유는 보안 문제였습니다. 데이터베이스의 주요 내용들 수정, 추..
4. 서버 배포 지금까지 한일 핵심 기능 (BE, 아이템 지급 / 닉네임 변경) 개발 웹페이지(front-end) 개발 인증(Authentication / Authorization) 기능 개발 테스트 데이터베이스 환경에서 서비스 테스트 기본적인 앱 개발이 완료되었습니다. 핵심 기능 개발은 평소에 익숙한 Java + Spring + JPA 환경이다 보니 생각보다 빠른 시간에 완료하였지만, 평소에 미숙했던 FE 개발과 JWT를 이용한 인증기능 구현이 꽤나 긴 시간이 걸렸습니다. 배보다 배꼽이 더 큰 느낌이네요^^ 이제는 배포할 시간! 3월까지 끝내겠다고 한 일이 4월 2주차까지 늦어졌습니다. 이제 얼른 배포를 해야 합니다!!! 사실 어플리케이션을 처음 배포할때에는 다음과 같은 계획을 세웠습니다. 웹서버(BE)를 AWS EC..
3. 인증 기능 구현 - JWT를 이용한 인증,인가 구현 개요 웹서비스가 가춰야하는 기능 중 가장 중요한 것이 사용자 인증 기능입니다. 저는 토큰 기반의 인증방식을 선택했습니다 . 인증 기능을 구현하는 가장 고전적인 방식은 세션/쿠키를 이용하는 것입니다. 하지만 세션은 서버의 일부 공간을 차지한다는 단점이 있습니다. 이에 비해 토큰 기반의 인증 방식은 클라이언트는 서버가 제공한 토큰을 가지고 있으면 비밀키(secret key)를 이용해 서명을 하여 인증 기능을 수행합니다. 즉, 서버는 비밀 키만을 가지고 있으면 되고, 추가적인 공간이 필요 없습니다. JSON Web Token (JWT) is a proposed Internet standard for creating data with optional signature and/or optional encrypti..
2. 핵심 기능 구현 (2) - REST API 설계 개요 1편에서는 요구사항을 비지니스 로직으로 정리하고 비지니스 로직을 구현하는 도메인을 설계하였습니다. 2편에서는 이어서 설계한 도메인을 기반으로 실제 REST API를 설계해보겠습니다. 1편에서 정리한 도메인별 핵심 비즈니스 로직을 기반으로 요청 url을 매핑하겠습니다. 유저 (Userinfo) : /userinfo 유저 조회 (닉네임) : GET /nickname/{nickname} 유저 닉네임 변경 : PUT /{nickname}/{newNickname} 물품 (Item) : /items 물품 조회 (이름) : GET /name/{name} 물품 전체 조회 : GET / 지급장부 (Gift) : /gift 장부 생성 : POST / 이제 도메인별로 컨트롤러 클래스를 생성해 컨트롤러를 만들어줍니다. ..
1. 핵심 기능 구현(1) - 도메인 설계 요구 기능 사항 1. 유저 이름 변경 2. 물품 지급 각 기능의 비즈니스 로직은 아래와 같습니다. 유저 이름 변경 닉네임으로 유저 조회 변경할 닉네임 입력 변경할 닉네임이 이미 존재하는 닉네임인지 조회 닉네임 변경 물품 지급 물품을 지급하는 유저 조회 물품을 받을 유저 조회 지급일 입력 물품 검색 지급할 물품 조회 메모 입력 물품 지급 도메인 3개의 도메인으로 구성됩니다. 유저(User)와 물품(Item)은 이름과 동일하게 유저와 물품의 정보를 저장하는 엔티티입니다. 선물(Gift)는 물품을 지급했을 때, 발신자, 수신자, 물품, 개수 등을 저장하는 지급장부입니다. 유저 (Userinfo) 야이디 : id 유저명 : nickname 생성시간 : insertTime UID 물품 (Item) 아이디 : id..