프로덕트

아티클

전체 보기
정소영

정소영

09.19 개발 로그

디콰에 첫 로그를 올릴 때는 굉장히 낯설고 부끄러웠는데, 오히려 이렇게 올리고 나니 정리가 되서 좋다. 그리고 둘러보다가 좋은 글도 읽게 되어 굉장히 유익하다고 느낀다.

  • <역행자>에서 이런 얘기가 나온다. 경제적 자유를 얻고 싶다면 그 사람들이 모인 집단에 들어가면 된다. 꾸준히 나가다보면 저절로 물들게 된다고 나와있다. 디콰를 하면서 느끼는 게 그거였다. 개발자가 되려고 한다면 개발자들이 모인 집단에 들어가야 한다는 말이다.

  • 처음 디콰에 글을 올릴 때만 해도, 낯설고 부끄러웠다. 글 올리기가 부담스러워서 우물쭈물 하기만 했다면 나 혼자 TIL을 마무리 하지 못한 채 쌓여만 갔을 것이다. 하지만 그 낯섦을 깨고 오늘 내가 한 개발 공부를 올리게 되면서 스스로 뿌듯함과 정리된 생각을 얻게 됐다.

  • 덤으로 얻게 된 건, 현업 개발자들이 하는 고민, 공부, 관심기술 같은 것들을 둘러보게 되고 나 또한 그들의 정보를 얻어 시야(?)를 점점 넓힐 수 있게 되었달까. 여튼… 오늘은 디콰를 둘러보다가 ‘컴포넌트 분리’에 대한 좋은 블로그 글을 알아가서 굉장히 좋았다.



오늘의 로그는 아직 개발 진행형인 내용들이다.

  • homepage의 diaryItme을 grid와 list형식으로 보여주기

    list와 grid일 때의 디자인은 각각 구현하였으나 컴포넌트 렌더링 과정에서 문제가 발생했다. 기존 grid상태의 뷰를 보여주는 컴포넌트는 db데이터를 받아와 화면을 렌더링하는 서버 컴포넌트였다.

    이에 list라는 상태를 변화시켜 주기 위해 state를 사용하였으나, 이미 db데이터를 사용하고 있어 클라이언트 컴포넌트 변경이 안된다는 에러를 발생시키고 있다. =_=…. 고 한다…

  • 이곳저곳에 있는 modal을, hooks으로 만들기를 시도했다.

    이미 다 구현해놓고, 공통화를 한다는 건 참 힘든 일인 것 같다ㅋㅋㅋㅋ ’일단 공통인 부분을 찾아보자!’ 해놓고 코드부터 손을 댔는데, 한참을 헤멨다. 하나를 고치면 하나에서 에러가 나고, 공통인 부분을 찾았는데 모두 다 똑같이 생긴 모습은 아니어서 어디까지 공통 컴포넌트로 구현할 것인가에 대한 선택도 해야 했다.

교통 정리가 필요했다. 코드를 보면서 구현을 바로 하는 게 아니라. 각 모달이 어떤 기능과 형태를 가지고 있는지 정리를 먼저 해봤어야 했다

  • 어디까지 공통 컴포넌트로 만들 것인가?

  • 모달 디자인을 공통으로 만들 것인가? 나눌 것인가? ( 크게 두 디자인의 모달이 있다. )

modal.png

  • 모달의 공통기능
    - 버튼을 클릭하면 모달이 생긴다

    - 배경( 검정 반투명 ) 과 Box 형태가 같다.

    - 기능을 하는 버튼들이 있다.

    - 취소하기 버튼 → 모달이 꺼진다.

    - 배경을 클릭해도 → 모달이 꺼진다

  • 모달의 다른 기능
    - 모달 다자인이 크게 두 종류로 구분 ( 버튼리스트 / input+버튼 )

    - input + 버튼 디자인 모달

    ⇒ title / 버튼 공통 ( 함수 기능 )
    ⇒ 입력 부분은 차이

정리의 결과

hooks을 생성해 전체적인 공통 기능인 모달 on/off를 관리하는 state및 함수를 만들고, ModalForm 컴포넌트를 생성해서 배경과 Box는 모달 공통 style로 구현했다. 그리고 hooks을 만들어 모달 공통 기능 on/off와 그를 관리하는 state 및 함수를 구현했다.

ModalForm과 hooks에 있는 함수를 연결해 basic-Modal을 구현함. 빨간 네모는 모달 안의 children을 받아와서 ..어찌 해보면 될거 같다. 여러 가지 모달의 형태가 나올 수 있을 것 같지만 그건 내일의 나에게 맡긴다.

modal2.png


5
5
정소영

정소영

09.18 개발 로그

오늘은 유난히 집중이 안되는 날이었다. 코로나에 걸린 탓이라고 하자. 우리집에서 왜 나만 2번씩이나 걸리는지 모르겠다 ㅋㅋㅋㅋㅋ ( ㅠ_ㅠ ) 여튼 그래도 개발로그 업뎃한다.

  • deatilPage 디자인 개선 및 유저정보 추가

  • Comment 기능 추가

첫 페이지 ( Next.js의 라우터 대문ㅋㅋㅋ ) page.js는 어떤 기능을 하고 있는지 한눈에 알아보기 쉬운 편이 좋다고 생각한다. 그래서 detail의 page.js를 기능별 컴포넌트로 쪼개서 구현하였다. detailpage는 서버 컴포넌트이기 때문에 바로 DB와 연동하여 데이터를 받아왔고, 컴포넌트마다 필요한 데이터를 props로 넘겨주었다.

약간의 디자인 업그레이드와 함께 post정보와 user정보를 함께 보여주었다. detailpage에서 client컴포넌트가 되는 부분은 middleNavBar ⇒ 좋아요 / 글 수정 / 삭제버튼이 있는 컴포넌트와 댓글 컴포넌트다. 클라이언트 컴포넌트 있는 부분을 내일 더 고도화 작업( 공통화,hooks생성 등 ) 할 생각이다.

개발을 하면 할수록 느끼는 것은, 내가 생각 하는 것을 구체적으로 표현하게 된다는 점이다. ’뭔가 이렇게 하면 될 것 같은데?’ 라는 흐리멍텅한 생각이 ‘A랑 B랑 합쳐서 C를 만들어 볼 수 있을 거 같아’라는 방식으로 구체적인 방향으로 생각하게 되는 것 같다.

PLAN

오늘은 간단하게 댓글 기능을 구현했으니 내일은 집중해서 머리를 굴려봐야 할 거 같다

  • commentItme컴포넌트에서 API요청 hooks으로 만들기

  • DB연결 함수 hooks으로 만들어서 사용하기

  • modal공통으로 사용하는 부분 찾아서 hooks으로 만들기 mypage-profile 수정 / detailpaeg-comment입력 / detailpage - 햄버거Icon ( 옵션버튼 )

5
0
정소영

정소영

9월 17일 개발로그

구현내용

이미지 미리보기 기능이 필요한 곳이 3 곳이 있다.

postpage / editpage / mypage의 유저프로필 수정 부분이다. 이 세 페이지에서 다 같은 코드를 사용하므로 이미지 미리보기 util함수를 생성하여 공용으로 사용하도록 했다.

postpage의 input / image / button 부분을 나눠 각각 컴포넌트화 시킨 후, editpage에서도 공용으로 사용할 수 있도록 하였다. 하나의 페이지를 컴포넌트로 나누면서 전역으로 데이터를 공유할 필요가 생겼다. 그래서 contextAPI를 사용해 image와 postdata를 contextAPI로 만들어 전역으로 사용하였다.

  • 글 작성 / 수정 기능 서버 api 요청 hooks으로 구현 → 공용 사용

  • 사용자 입력 받는 input도 hooks으로 구현

post와 edit페이지에 있는 버튼 컴포넌트는 공통화를 고민중이다. 지금은 하지 않는게 더 나을거라는 판단을 해서 하지 않았지만, 개발 하다보면 더 좋은 아이디어가 떠오르면 언젠가 합칠수도. 코드가 바뀔 수도 있을 것 같다.

마무리

hooks을 만들고 컴포넌트를 공통화 하면서 느끼는 부분이 있다. 이전에는 하나의 함수는 하나의 기능을 한다고 생각했다. handleClickPostAdd라면 post를 작성하는 함수라고만 생각했을 텐데ㅋㅋㅋ 하지만 그 안에서도 다양한 기능들이 있음을 인지했다.

그 기능이 중복된다면 따로 빼서 어떻게 구현해 볼 수 있을까, 이 함수를 utils로 만들었을 때 어떤 데이터를 필요로 하는지 고민하고 있는 내 모습을 발견했다.!!!! 프로젝트에서 코드를 나누고 쪼개고 붙이는 연습을 해보면서 컴포넌트와 함수가 하나의 구체적인 일(?), 역할(?)을 하도록 만들고 싶어졌다.

코드는 엄청 많이 바뀌었는데 왜ㅋㅋㅋ겉 표지는 별로 바뀐 게 없지… 티가 나지 않는다!@_@ 케헥. 그래도 어제 쓴 대로 오늘 구현했다. 나름… 선언했다고 개발하고 로그까지 올린다. 오늘이 마무리 끝, 좋다.

내일은.

댓글기능 ㄱㄱ ㅋㅋ

5
0
정소영

정소영

오늘의 개발 로그.

TIL을 쓰기로 해놓고, 자꾸 미루게 된다.

그래서 방법을 바꿨다. '해야지 해야지'가 아니라 공개적으로 선언(?)하기로 했다ㅋㅋㅋ

완벽하게 쓰려니까 부담스러워서 TIL을 미루는 경향이 있는 것 같다. ( 핑계임ㅋㅋㅋ )

그냥 나는 오늘 무엇을 구현했는지, 내일 뭐 할건지 간단하게 정리해보자.

사실 공부한 내용을 정리하는 거라 간단하지는 않다 ㅋㅋㅋ 노션에는 길게 적어 뒀지만 이 다짐이 언제 또 무너질지 모르니까 ㅋㅋㅋ 디콰에도 개발 로그를 간단하게 적어본다.

< 오늘 구현 사항 >

  • 메인 image캐러셀 구현하기

  • postpage에서 image컴포넌트를 분리했다.

  • image S3로 업로드 하는 부분 utils함수로 빼서 컴포넌트에서 사용하기

< 내일 구현할 것 >

  • mypage이미지 업로드 부분 utils함수로 바꾸고, image 컴포넌트로 사용하기

  • postpage - editpage 합쳐보기@_@ -> input hooks생성


이렇게 하나씩 구현하는 내용이 늘어날수록 욕심이 생긴다. postpage와 editpage의 기능이 비슷한데 이 둘을 합쳐볼 수는 없을까? 하는 생각, 그리고 뭔가 더 공통인 부분을 찾게 된다던지… 찾았다면 어떻게 구현해 볼 수 있을까? 하는 고민이 늘어간다. 실제로 구현을 하다 보니 공부할 거리가 많아서 재미있다.

버셀에 배포는 했는데 환경변수에서 자꾸 에러가 난다. 그래서 로그인이랑 ㅡㅡ 포스트 작성이 안된다.ㅋㅋ 이건 내가 어떻게 해결해야 하는지 잘 모르겠다!!!! @_@

여튼, 오늘도 한 건.. 아니 여러 건 했다. image컴포넌트를 분리한 것! 그리고 contextAPI를 내가 필요에 의해서 사용할 수 있게 된 것. 어떻게 하면 개발을 잘하게 될까? 어떤 고민을 하면 개발적으로 성장할 수 있는걸까!!...

5
0
정소영

정소영

Next.js를 사용해 일상공유 Diary 서비스 만들기

Next.js를 사용해 Diary프로젝트를 진행하고 있다. 팀프로젝트를 하기 어려운 상황도 있었고, Next.js를 통해서 백엔드까지 구현할 수 있다는 것, 그리고 SSR( 아직까지 크게 와닿지는 않지만.. )을 공부할 수 있다는 생각에 더 큰 흥미를 느껴서 도전해보게 되었다. 강의를 들으면서 작은 토이프로젝트를 구현해보고, 그것을 바탕으로 Next.js기반의 프로젝트를 구상했다.

Next.js는 React.js와 비슷하지만 가장 뚜렷하게 큰 특징은( 내가 생각하기에 ㅋㅋ) (1)라우터와 (2) 서버 / 클라이언트 컴포넌트가 나뉘어져 있다는 것이다. 프로젝트를 만들면서 이 부분에 조금 고민이 많았던 것 같다.

(1) 라우터 : 폴더 경로에 따른 파일 시스템 계층 구조로 이루어져 있다. 폴더를 생성하면 그에 해당하는 페이지가 연결되는 방식이다. 프로젝트가 진행되면서 페이지가 하나씩 추가되었고, 해당 폴더도 늘어갔다. 폴더 관리를 어떻게 하는 것이 좋을까 하는 고민도 자연스럽게 하게 되었고, 이번 프로젝트에서는 페이지별로 컴포넌트와 스타일 파일을 관리해보는 것으로 선택했다.

(2) 서버 컴포넌트와 클라이언트 컴포넌트가 구분되어 있어서, 각각의 특징에 맞게 코드를 작성해야 했다. React.js에서 사용했던 useEffect, useState와 같은 hooks들은 서버 컴포넌트에서 사용할 수 없었다. 그래서 그들을 사용하려면 use client를 사용해야 했다.

Next.js는 SSR을 구현하기 위한 프레임워크다. 서버에서 렌더링 한 페이지를 클라이언트에 보내줘 빠른 로딩이 되게 하는 게 장점이다. 그렇기 때문에 서버 컴포넌트를 최대한으로 사용하고 사용자와 인터렉션이 있어야 하는 부분( 버튼 같은? )을 클라이언트 컴포넌트로 구현하는 것이 핵심이다. 왠지 'use client'를 쓰면 지는것 같은 느낌이ㅋㅋㅋㅋ 누가 답을 알려주면 참 좋겠다는 생각을 굉장히 많이 했다.

GPT에게 '내가 이렇게 생각해서 이렇게 구현했는데 이게 맞아? '라는 형태로 질문을 하면서 내가 이해한 내용을 확인하고, 잘못 이해한 부분은 다시 찾아보며 공부하는 형태로 프로젝트를 진행해갔다. 물론 GPT는 21년도 까지의 내용이 있기 때문에 대부분의 Next.js내용은 공식문서를 비교하며 봐야했다ㅋㅋㅋ 그 외에도 개발 전반적인 내용 비동기처리, react, js등의 여러 내용을 추가적으로 공부할 수 있는 기회가 됐다.♡

오늘까지 완성된 프로젝트의 진도는@_@ version01로,

  • 기본 페이지 ( 홈 / 로그인 / 회원가입 / 작성 페이지 / 마이페이지 / 수정페이지 )는 완료.

  • 기능은 회원가입 / 로그인 / 글작성 까지는 된다!!

아직은 개발중인 프로젝트의 개발 진행기다. 다음주에는 마이페이지 기능구현과 로그인 여부에 따른 세부적인 부분을 봐야할 것 같다. 뭔가 혼자 끄적거리는 것처럼 글을 썼더니 반말체가 되어버렸네요. 마무리만 존대로ㅋㅋㅋ 더 딥한 이야기는 블로그와 노션에 있어요. 모든 이야기를 공유하고 싶지만 시간이 늦었으므로. 이만 여기까지 하겠슴니다.

★blog

8
2

포스트

아직 포스트가 없습니다.