Today I Learned/TIL 07
-
2023 - 07 - 12 레이어드 아키텍쳐 Layered Architecture PatternToday I Learned/TIL 07 2023. 7. 12. 19:58
오늘 배운 것 : 레이어드 아키텍쳐 1.컨트롤러 Controller 컨트롤러(Controller)란 클라이언트의 요청을 처리 한 후 서버에서 처리된 결과를 반환해주는 역할을 한다. 클라이언트의 요청(Request)을 수신한다. 요청(Request)에 들어온 데이터 및 내용을 검증한다. 서버에서 수행된 결과를 클라이언트에게 반환(Response)한다. 2. 서비스 Service 서비스 계층(Service Layer)이란 비즈니스 로직 계층(Business logic layer)이라고도 불린다. 아키텍처의 가장 핵심적인 비즈니스 로직을 수행하고 실제 사용자(클라이언트)가 원하는 요구사항을 구현하는 계층이다. 프레젠테이션 계층(Presentation Layer)과 데이터 엑세스 계층(Data Access La..
-
2023 - 07 - 11 테스트코드 (Test Code)Today I Learned/TIL 07 2023. 7. 11. 20:11
오늘 배운것 테스트 코드 테스트 코드란 말 그대로 우리가 작성한 코드에 문제가 없는지 테스트하기 위해 작성하는 코드이다. 1. 실시간 코드 반영 테스트 코드는 방금 작성한 코드를 당장 테스트 하기 위해서만 작성되는 것이 아닙니다. 잘 구성된 테스트 코드는 이후 다른 변경 사항으로 인해 발생 가능한 결함을 찾아내는 역할을 한다. 2. 수동 테스트 도구 방금 구성한 코드가 잘 동작하는지 테스트 하기 위해서 테스트 환경을 손으로 직접 만드는 것은 아무리 쉽게 한다고 해도 작성된 테스트 코드를 실행하는 것 보다 쉽지 않다. 3. 클라이언트 테스트 MVP, MVVM 등 클라이언트 쪽에서 많이 회자되는 아키텍쳐가 중요하게 생각하는 것 중 하나는 뷰와 로직의 분리이며, 이를 통해 얻고자 하는 것 중 절대 빠질 수 없..
-
2023 - 07 - 10 객체지향 설계 5가지 원칙 SOLIDToday I Learned/TIL 07 2023. 7. 8. 01:19
객체지향은 소프트웨어의 핵심을 기능이 아닌 객체로 삼으며, 각각의 역할을 정의하는 것에 초점을 맞춘다. 객체지향 소프트웨어의 특징 1. 캡슐화, 다형성, 클래스상속을 지원한다. 2. 데이터 접근 제한을 걸 수 있다. 객체지향 프로그래밍의 장점 1. 의존성을 효율정으로 통제할 수 있는 다양한 방법을 제공함으로써 요구사항 변경에 좀 더 수월하게 대응할 수 있다. 2. 데이터 중심으로 프로그래밍 함으로써, 코드의 덩치가 커지더라도 일관성을 유지하기 좋다. 3. 객체지향 코드는 자신의 문제를 스스로 처리해야 한다는 우리의 예상을 만족시켜주기 때문에 이해하기 쉽고, 객체 내부의 변경이 객체 외부에 파급되지 않을 수 있도록 제어할 수 있기 때문에 변경하기 수월하다. 4. 데이터와 프로세스를 하나의 단위로 통합한 방..
-
2023 - 07 - 07 Json Web Token (JWT)의 장단점, 토큰과 DB 사용자 인증, 쿠키, 세션 (면접 단골질문)Today I Learned/TIL 07 2023. 7. 7. 01:08
jwt > 면접 단골질문 질문 : 왜 db에서 검색하는데 토큰에서 한번 더 검색하는가?? jwt로 사용자인증 미들웨어 구현이 가능하다. jwt 장점: 암호화/보안/검증된 라이브러리. > 따로 저장하지 않아도 된다. > 쿠키안에 키랑 정보가 다 들어있어서 저장공간이 별도로 필요 없다. > 인증에 대한 정보가 담겨 있다. > DB에 저장한 데이터를 보지 않아도 이 토큰이 암호화/복호화를 통해 위변조 되었는지를 알 수 있다. 위변조를 토큰만 보고도 검증할 수 있다. 그런데 왜 토큰만 보고 알 수 있는데, 유저아이디로 DB를 한번 더 검증해서 가져올까? > 토큰이 만료되기 전에 유저 DB의 정보가 변경되었을 경우 한번 더 비교하기 위해서? >>> 사실은 필요없다. (이 로직에서는) >>> 유저아이디로 DB를 한..
-
2023 - 07 - 06 트랜젝션 (Transaction) ACID (원자성, 일관성, 격리성, 지속성), 락(Lock), 락킹 수준, 교착상태 (Deadlock), 트랜잭션의 격리 수준Today I Learned/TIL 07 2023. 7. 6. 13:12
트랜젝션 작업의 완전성을 보장해주기 위해 사용되는 개념. 특정 작업을 전부 처리하거나, 전부 실패하게 만들어서 데이터의 일관성을 보장해주는 기능이다. 트랜잭션(Transaction)을 사용하는 대표적인 이유는 작업의 단위를 하나의 쿼리에 종속하는 것이 아닌, 여러개의 작업(쿼리)을 묶어 하나의 작업 단위로 그룹화하여 처리하는 작업을 뜻한다. 대부분의 데이터베이스가 트랜잭션의 특징을 이용하고 있으며, MySQL뿐만 아니라 거의 모든 데이터베이스에서 트랜젝션의 개념을 활용한다. 트랜젝션의 4가지 특징 원자성(Atomicity) / 일관성 (Consistency) / 격리성 (Isolation) / 지속성 (Durability) 원자성(Atomicity)은 트랜잭션 내에서 실행되는 명령들을 하나의 묶음으로 처..
-
2023 - 07 - 05 액세스 토큰 Access Token, 리프레쉬 토큰 Refresh TokenToday I Learned/TIL 07 2023. 7. 5. 06:12
Access Token 사용자의 권한이 확인, 즉 로그인 되었을 경우 해당 사용자를 인증하는 용도로 발급한다. Cookie로 jwt를 발급하고 설정한 Expires 기간이 지날 때 인증이 만료되게 하는것 또한 Access Token이다. 사용자가 Access Token을 가지고 인증을 요청할 경우 Token을 생성할 때 사용한 비밀키(Secret Key)를 가지고 인증하기 때문에, 복잡한 설계없이 코드를 구현할 수 있고, 여러 분기를 거치지 않아도 된다는 장점이 있다. Access Token의 경우 Stateless(무상태) 즉, Node.js 서버가 죽었다 살아나더라도 동일한 동작을하는 방식이다. 즉, jwt를 이용해 사용자의 인증 여부는 확인할 수 있지만 처음 발급한 사용자 본인인지 확인할 수는 없다..
-
2023 - 07 - 04 TCP, UDP, 소켓(socket.io), 웹소켓, 패킷Today I Learned/TIL 07 2023. 7. 4. 10:44
TCP 서버와 클라이언트 간 신뢰성 있는 데이터 송수신을 위해 만들어진 프로토콜. (연결 지향성 프로토콜) TCP로 서버-클라이언트 간 연결이 된 경우 데이터를 양방향으로 주고받을 수 있다. 만약 누락된 데이터가 있으면 클라이언트가 서버에게 재요청해서 완전한 데이터를 만들 수 있다. UDP에 비해 데이터 송수신비용부담이 크고, 속도가 느리다. UDP 비연결성 프로토콜이다. 데이터를 보내고, 제대로 받았는지 확인하지 않아 신뢰도가 낮다. TCP에 비해 데이터 송수신비용부담이 적고, 속도가 빠르다. 소켓 네트워크에서 데이터를 송수신하기 위해 반드시 거쳐야 하는 연결부이다. 일반적으로 안정적인 데이터 송수신을 위해 TCP 소켓을 사용하지만, 일부 패킷이 손실되어도 괜찮거나 빠른 전송속도가 필요한 경우 UDP소..
-
2023 - 07 - 03 코드 가독성을 위한 코드서식 관리도구 PrettierToday I Learned/TIL 07 2023. 7. 4. 10:26
https://prettier.io/playground/ Prettier prettier.io Prettier를 이용하면 코드를 가독성있게 변경시킬 수 있다. 프리티어의 기본 속성: (변경가능) 콤마는 es5의 형식을 따른다. 들여쓰기는 4개의 스페이스를 쓴다. 세미콜론은 쓰지 않는다. 외따옴표를 쓴다. 파라미터 자리에 소괄호를 쓴다. 추천하는 코드. module.exports = { trailingComma: "es5", tabWidth: 2, semi: true, singleQuote: true, arrowParens: 'always', }; module.exports= { "printWidth": 80, // 줄 바꿈 할 폭 길이 "tabWidth": 2, // 탭 너비 (보통 2~4. 코드가 길어..