본문 바로가기

전체 글146

[React] 페이지 리랜더링되는 조건 리액트를 공부하면서 페이지가 랜더링되는 시점이 너무 헷갈렸다. 왜 너는 내가 시키지도 않은 일을 하는거야?!의 반복... 공부를 하고 업무에 적용하면서 조금은 이해가 됐지만 앞으로 시간날때 틈틈히 복습하면서 기록을 남겨놓아야겠다고 생각했기 때문에 남겨보려고 한다. React가 리랜더링하는 것에는 몇 가지 조건들이 있다. 1. 부모 컴포넌트가 랜더링 되었을 때 부모 컴포넌트가 랜더링되면 자식 컴포넌트는 모두 리랜더링된다. 코드양이 많아지면 랜더링량이 많아지게 되므로 최적화는 필수적이다. 2. State 변경이 있을 때 React는 State를 사용해서 동적인 데이터를 저장한다. State 변경이 감지되면 리랜더링을 해주게 되는데 setState로 바꿔주지 않고 직접 값을 변경하게 되면 React는 이를 감.. 2022. 10. 22.
[외부 API] 카카오 소셜 로그인 API, 네이버 SENS SMS API 1. 카카오 소셜 로그인 API 서버에서 클라이언트에게 액세스 토큰을 발급받아서 카카오로부터 사용자에 대한 정보를 얻어오고 해당 이메일이 서비스에 가입되어 있는지 검사를 하였다. [일반 회원가입 - 해당 이메일로 가입한 유저가 있는지 검사] public PostUserRes createUser(PostUserReq postUserReq) throws BaseException { // 가입 중복 이메일 검증 if(userProvider.checkEmail(postUserReq.getEmail()) == 1) { throw new BaseException(DUPLICATED_EMAIL); } if(userProvider.checkPhone(postUserReq.getPhone()) == 1) { throw .. 2022. 3. 22.
인스타그램 화면별 쿼리 내가 팔로잉한 사람들의 게시물과 스토리(메인화면) [상단] 스토리 select Story.idx as idx, Story.userIdx as userIdx, FirstStory.userId , FirstStory.profileUrl from Story inner join ( select Story.userIdx, User.userId, User.profileUrl, max(Story.idx) as 'latestStory' from Story inner join User on Story.userIdx = User.idx group by Story.userIdx) FirstStory where latestStory = idx and Story.status = 'ACTIVE' and Story.userIdx .. 2022. 3. 13.
[쿠팡이츠 클론코딩] ERD 설계 ERD설계는 AQueryTool을 사용하였고 데이터베이스는 MySQL을 사용하였다. 쿠팡이츠 ERD 설계 1. User(유저) 쿠팡이츠 서비스를 이용하기위해 회원가입을 한 사람의 데이터가 쌓일 테이블 정보이다. 유저 번호는 기본키이며 auto increment 설정을 해주었다. 유저번호는 중복값이 없어야하기때문이고 1씩 증가하도록 해줄 것이다. createdAt, updateAt은 레코드가 생성될 때, 수정될 때 시간이 자동으로 저장되게끔 설정해주었다. joinType(가입수단)은 개발하려는 서비스가 일반회원과 카카오회원으로 나뉘기 때문에 넣은 컬럼이다. 이 컬럼이 없어도 상관없을거라고 생각할 수도 있지만, 쿠팡이츠는 카카오로 가입된 카카오 이메일과 동일한 이메일로 자체회원가입을 하게 되면 이미 카카오톡.. 2022. 3. 11.
[쿠팡이츠 클론코딩] 개발 범위 및 API 명세서 2021년 6월, 2주동안 클라이언트 1명과 함께 쿠팡이츠 클론코딩을 진행하였다. 블로그를 운영하고나서 진행한 프로젝트인데도 불구하고 2주라는 짧은 시간동안 진행되는 프로젝트다보니 블로그에 제대로 남기지 못했다. 그 아쉬움으로 다시 상기시킬겸 블로그를 작성해본다! 우리가 원하는 주제로 기획해서 개발하는게 아니라, 이미 서비스 중인 "쿠팡이츠" 앱을 따라서 코딩하는 것이다보니 어디서부터 어디까지 똑같이 따라할 것인가?에 대한 고민이 컸다. 하지만 최대한 많은 기능을 구현하고 싶었고 제대로 하고 싶었다! 다음은 클라이언트 담당 팀원과 계획한 개발범위, 그리고 서버에서 계획한 필요한 API들이다. 1. 개발 범위 2. API 명세서 RESTful한 API를 위해 REST API의 설계규칙을 지켰다. 총 51개.. 2022. 3. 11.
MySQL 문법 정리 MYSQL 문법정리 코딩테스트 직전에 SQL 문법을 훑어보기 좋게 정리하였다. 꾸준히 업데이트 예정이다. ◆ DISTINCT : 중복제거 SELECT count(DISTINCT NAME) ... - NAME의 개수를 세지만, 중복을 제거하여 count한다. ◆ SET : 변수생성 SET @VAR := 1; SELECT (@VAR := @VAR + 1) .... - VAR 변수 선언하고 초기값을 1로 설정 - VAR 변수에 1씩 더해서 결과를 출력 ◆ CASE: 조건문 SELECT (CASE WHEN 조건식1 THEN 결과1 (CASE WHEN 조건식2 THEM 결과2 ELSE 나머지 결과 END) - 조건식 1에 해당하면 결과1을 출력, 조건식 2에 해당하면 결과 2를 출력, 그 외에는 나머지 결과 출력.. 2022. 3. 3.