분류 전체보기 102

24-02-23

백오피스 프로젝트가 시작됐고 펫시터 매칭(예약) 서비스를 만들어보기로했다. 프로젝트명: 집사가 없는 사이(집업사) 서비스 내용: 집사가 없는 사이에 반려동물 걱정을 덜어주는 프리미엄 펫시터 서비스 작업 진행 순서 와이어 프레임 작성 -> ERD작성 -> API명세서 작성 -> 역할 분담 내 역할: 유저와 관련한 CRUD 3분할(유저 정보, 상세정보 조회) 3계층 분리 레포 findUserByEmail = async (email) => { return await this.prisma.users.findFirst({ where: { email: email } }); } getUserById = async (userId) => { return await this.prisma.users.findMany({ wh..

TIL 2024.02.26

24.02.22

부끄럽지만 오랜만에 알고리즘 문제를 하나 풀었다! 약수의 합을 구하는 문제를 풀어보았다. 내가 생각하고 해결하기 1. 자연수 n의 자리 값을 모두 더한 값을 넣어 줄 변수를 만들어준다. 2. 약수는 어떻게 구하지? => 1차 생각: n보다 작은 수 a와 b를 곱해서 n이 나오면 약수가 아닌가? 그럼 이 a와 b를 어떻게 더해주지..??(머. 리. 대. 폭. 발) 2차 생각: 동기분의 도움을 받아 약수를 구하는 방법을 찾아냄 n이라는 숫자를 받았을 때 for문에서 카운터 변수 i를 하나씩 증가시켜서 n을 i로 나눠서 0이 되면 약수다. 코드 읽어보기 인자n을 받는 solution 함수를 선언할 거임. 약수를 모두 더한 값을 받을 변수 sum을 초기화해 둠 for루프를 통해서 카운터 변수 i를 1로 설정하고..

TIL 2024.02.23

24.02.21

Class로 리펙토링을 하면 좋은 점 - 코드를 객체 지향적으로 구조화할 수 있다. - 모듈화와 재사용성 : 모듈화된 클래스는 다른 부분과 독립적으로 사용되거나 재사용될 수 있어 코드의 재사용성이 높아짐 - 상속과 다형성: 상속을 통해 다른 클래스로부터 속성과 메서드를 상속받을 수 있으며, 코드의 재사용성을 높인다. 상속을 통해 다형성을 구현할 수 있다. * 다형성: 같은 이름의 메서드를 다른 방식으로 구현하여 다양한 객체에서 사용할 수 있게 하는 것. -캡슐화와 정보 은닉: 클래스는 데이터와 그와 관련된 메서드를 함께 캡슐화가 가능하다. 데이터와 메서드가 하나로 묶여있기 때문에 가독성, 유지보수성이 향상된다. 접근 제어자를 사용하여 데이터에 대한 접근을 제한할 수 있어 정보 은닉을 구현할 수 있음. -..

TIL 2024.02.21

24.02.20

22일 18시 까지 3계층으로 아키텍쳐로 분리하고... 테스트 코드도 작성하고 배포까지 해야하는 과제를 진행하고 있는데 사실 강의도 다 듣지 못한 상태로 과제를 하고 있다. 정확하지 않지만 내가 알고 있는 것은 컨트롤러, 서비스, 레파지토리의 역활 정도?? 어제 30분정도만 자고 다시 과제를 하려고 했는데 알람을 못듣는 바람에 결국 4시까지 자버려서 TIL도 작성을 못했다 ㅋㅋㅋㅋ... 저번 숙련 과제 때 나는 과제를 시작도 못했던 사람이기 때문에 같이 공부하시는 분이 어느 정도 하셨었다는 이야기를 듣고 그분의 과제 파일을 클론하고, 작성해두신 코드와 강의에서 3계층으로 나눈 것을 따라한 코드를 번갈아보면서 계층분리를 시도하고 있다. 음... 잘 돌아갈지는 모르겠지만 레파지토리는 작성이 끝났고 현재는 서..

TIL 2024.02.21

24.02.19

3계층 아키텍쳐 형식으로 만들어보기 컨트롤러(클라이언트에게 반환해주는 부분?) // 게시글 상세 조회 API getPostById = async (req, res, next) => { try { const { postId } = req.params; const post = await this.postService.findPostById(postId); return res.status(200).json({ data: post }); } catch (err) { next(err); } }; // 게시글 수정 API updatePost = async (req, res, next) => { try { const { postId } = req.params; const { password, title, conten..

TIL 2024.02.20

24.02.16

좋은 설계를 하기 위해서 다양한 프로그래밍 패러다임과 아키텍처 패턴을 프로젝트에 도입하여, 체계적으로 깔끔한 코드 구조를 구현할 수 있다. 객체(Object)란? - 현실 세계의 물체나 개념을 소프트웨어 세계로 옮긴 것. 객체는 여러 속성과 행동(메서드)으로 구성된다.(객체는 정보= 데이터와 정보 처리해 주는 행동 = 함수 | 메서드를 가지고 있음. 레고 블록을 하나씩 조립해서 작품을 만들기 위해 객체 지향 프로그래밍을 사용한다 객체 지향(Object-Oriented) - 책임과 권한을 가진 객체들이 서로 협력하여 필요한 기능을 수행하는 방법론 (여러 가지로 만들어진 객체들을 조립만 하면 된다) - 크고 작은 복잡한 시스템을 효과적으로 분해, 구성하여 효율적으로 관리할 수 있게 도와줌 절차 지향적 소프트..

TIL 2024.02.16

24.02.15

오늘은 뉴스피드 프로젝트가 끝났다. 12시 전까지 이것저것 추가를 하고 제출을 한 후 2시에 프로젝트 발표회를 진행을했다. 우리 조는 8번째 순서였는데 앞선 7개 조의 작품을 보니 굉장히 많은 기능들과 우리가 생각지도 못한 기능, 주제의 프로젝트를 진행을 하셨다. 우리 조는 앞선 til에서 적어 놓았는지는 모르겠지만 같은 관심사를 가진 사람들의 모임을 만드는 뉴스피드 페이지를 만들기로 했는데 이메일 인증, 회원가입, 로그인, 로그아웃, 프로필 조회, 프로필 수정, 게시물 작성, 게시물 조회, 게시물 상세조회, 게시물 수정, 게시물 삭제, 댓글 작성, 댓글 조회, 댓글 수정, 댓글 삭제 기능을 구현했다. 그 중에 나는 게시물 작성, 게시물 조회, 게시물 상세조회, 게시물 수정, 게시물 삭제 기능을 담당하였..

TIL 2024.02.16

24.02.14

전날에 하던 좋아요 기능을 마저 테스트, 검증 로직 추가, 코드 수정 등을 통해서 좋아요 기능을 만들었다. 정확하진 않지만 Likes라는 테이블을 새롭게 만들어서 누가 어떤 게시물을 좋아요를 눌렀는지 확인할 수 있으면 좋을 것 같아서 테이블을 만들었다. import express from 'express'; import { prisma } from './model/index.js'; import { createAccessToken, validateAccessToken, } from './middlewares/authomiddleware.js'; const router = express(); // get: 서버에 있는 데이터를 꺼내올 때(볼 때) post: 서버에 데이터를 새로 만들거나, 서버에 뭔가를 요..

TIL 2024.02.15

24.02.13

팀프로젝트 제출 기한이 하루 늘어서 팀원들 모두 실력 향상의 느낌으로 내일 오후 까지 개인적으로 좋아요 기능을 구현해보기로 했다. 좋아요 기능을 구현하기 위해 내가 생각해본 것 어떤 포스트에서 좋아요를 누르면 작동하게 해야한다. 포스트를 누르는 대상은? 유저 좋아요를 눌렀을 때 서버에 저장되야하는 것은? 좋아요를 누른 사람, 언제 눌렀는지, 좋아요가 눌린 포스트의 정보 내가 생각한 것을 바탕으로 테이블을 만들기 위해 schema 모델을 작성해보았다. model Likes { likeId Int @id @default(autoincrement()) @map("likeId") userId Int @map("userId") postId Int @map("postId") createdAt DateTime @de..

TIL 2024.02.14

24.02.08

뉴스피드 프로젝트가 시작이 되었는데 나는 아직 실력이 많이 부족해서 회원가입, 로그인, 로그아웃, 프로필조회, 프로필 수정API를 구현하기로 했고 부족하기 때문에 팀장님의 도움을 받아 작성한 코드를 하나씩 읽고, 주석을 달아보면서 공부를 진행했다. // 회원가입 API router.post('/sign-up', async (req, res, next) => { try { // 클라이언트로 부터 전달받은 body 값을 객체분해할당한다. const { email, password, passwordchek, name, age, gender, interest, selfInfo, } = req.body; // 검증 부분 // 비밀번호의 길이가 6자 이상이 아닐 경우에 상태코드 400과 오류메시지를 전달한다. if..

TIL 2024.02.13
728x90