๐ Catchoo ํ๋ก์ ํธ
- record ์กฐํ ์ ๋ฆฌํด๋๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ: catId ์ญ์ , commentId ์ฝ์
- ์ ์ฒด์ ์ผ๋ก ์์ ๊ณผ ์ญ์ ๋ฒ๊ทธ ์ก์
- ๊ฒ์๊ธ ์กฐํ ์ ์ญ์ ๋ ๋๊ธ ๋์ค๋ ๋ฌธ์ ์์
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
#!/bin/bash
REPOSITORY=/home/admin/app/step1/Project_Cats
cd $REPOSITORY/catchoo-server/
echo "> Git Pull"
git pull
echo "> project build start"
./gradlew build
echo "> copy Build file"
cp ./build/libs/*.jar $REPOSITORY/
echo "> check pid of application running now"
CURRENT_PID=$(pgrep -f cat-app-server)
echo "$CURRENT_PID"
if [ -z $CURRENT_PID ]; then
echo "> not shut down because there is not application running now."
else
echo "> kill -2 $CURRENT_PID"
kill -9 $CURRENT_PID
sleep 5
fi
echo "> deploy new application"
JAR_NAME=$(ls $REPOSITORY/ |grep 'cat-app-server' | tail -n 1)
echo "> JAR Name: $JAR_NAME"
nohup java -jar $REPOSITORY/$JAR_NAME &
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// ArticleService.java
public List<ArticleResponse> fetchArticlePagesBy(
Long lastArticleId, int size, Long loginMemberId
) {
Member loginMember = memberService.findById(loginMemberId); // ์ฌ์ฉ์ ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ค.
List<Member> followers = findFollowersWithLoggedInMember(loginMemberId, loginMember); // ์ฌ์ฉ์๋ฅผ ํฌํจํ๊ณ , ์ฌ์ฉ์๊ฐ ํ๋ก์ฐํ๊ณ ์๋ ์ฌ๋๋ค์ ๊ฐ์ ธ์จ๋ค.
Page<Article> articles = fetchPages(lastArticleId, size, followers); // followers์ ๊ฒ์๋ฌผ๋ค์ ํ์ด์ง๋ค์ด์
ํด์ ๊ฐ์ ธ์จ๋ค.
return ArticleAssembler.toDtos(articles.getContent(), loginMember);
}
private List<Member> findFollowersWithLoggedInMember(
Long memberId, Member loginMember
) {
List<Long> followingsIds = followService.findFollowingsIds(memberId);
List<Member> allMembers = memberService.findAllByIds(followingsIds);
allMembers.add(loginMember);
return allMembers;
}
private Page<Article> fetchPages(Long lastArticleId, int size, List<Member> followers) {
PageRequest pageRequest = PageRequest.of(0, size); // ํ์ด์ง๋ค์ด์
์ ์ํ PageRequest, ํ์ด์ง๋ 0์ผ๋ก ๊ณ ์ ํ๋ค.
return articleRepository.findByIdLessThanAndAuthorInOrderByIdDesc(lastArticleId, followers, pageRequest); // JPA ์ฟผ๋ฆฌ ๋ฉ์๋
}
๐ฉโ๐ป ๋ชจ๊ฐ์ฝ
- ํฌ์ง์ด๋ ์ค๋๋ง์ ํ๊ต ์์์ ๋ชจ๊ฐ์ฝ
๐ Catchoo ํ๋ก์ ํธ
๐ JIB ํ๋ก์ ํธ
ํ๋ก์ ํธ์ฅ๋์ด ๊ทธ์ ๊ป ๋ด ์ฑ์ฅ์ผ๊ธฐ๋ฅผ ๋ณด์๊ณ ๋ฆฌ์กํธ ๋ฅ๋ ฅ์์ธ ์ค ์๊ณ ์ฐ๋ฝ์ ์ฃผ์ จ๋ค.. ํํํ ์ ๊ฐ ๋ฆฌ์กํธ ๋ฅ๋ ฅ์์ธ์ค ์์ จ๋ค๋ฉด ๊ฒฝ๊ธฐ๋ ์ค์ฐ์ ๋๋ค ๊ทธ์ ๊ป ์ฑ์ฅ์ผ๊ธฐ์ ํ๋ก ํธ์๋ ํํธ๋ ๋ฆฌ์กํธ ๋ฅ๋ ฅ์์ธ ์บฃ์ธ ํ์๋ถ๋ค์ด ํ์ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ฒ..ใ ใ ์ ์ค๋ช ๋๋ฆฌ๋๊น ๊ทธ๋๋ ์ผ๋จ ์ด๋ ๊ฒ ๋๊ฑฐ ํ๋ก ํธ์๋๋ ํด๋ณด์! ํด์ ์ผ๋จ๊ฒฐ์ ํ๋ก ํธ ํ์๋ ์ฐธ์ํ๊ฒ ๋์๋ค. ๋๋ค ํ๋ฉด ์ ๋ง ์ข๊ฒ ์ง๋ง ์ ๋ง ํ ์ ์๋์ง๋ ์ข ๋ ๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
ํ๋ก ํธ์๋ ํ์
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ ์ปดํฌ๋ํธ๋ก ๋๋๋ ๊ฒ์์ ์์ํ๋ค. ์ปดํฌ๋ํธ๊ฐ ๋ฆฌ์กํธ์ ๊ฐ์ฅ ํต์ฌ
๋ณดํต ํ๋ก ํธ์์ ๋๊ฐ ํ๋ฉด ๋ฐ ๋ผ์ธ์ ์ฃผ๋ฉด ๊ธฐํํ์์ ์ด๋ฅผ ์ฑ์๋ฃ๋ ์์ผ๋ก ํ๋ก์ ํธ๊ฐ ์์ํ๋ค๊ณ ํ์ จ๋ค. ๋ฐฑ์๋๋ ์ด๊ฒ ๋์์ ๋ ์ข ๋์ค์ ์์ํ๋ค๊ณ .. ์ด ์ด์ผ๊ธฐ๋ฅผ ๋ค์ผ๋ฉฐ ์๋ฌด ์๊ฐ ์์ด ๋ฐฑ์๋์์ ๋ฐ์ดํฐ ์คํค๋ง๋ถํฐ ํ๋ฉด์ด ์ด๋ป๊ฒ ๋์ฌ ์ง ๋ค ์์ธกํ๊ณ ์ ํด์ ์์์ ํ๋ ์บฃ์ธ ํ๋ก์ ํธ๊ฐ ์๊ฐ๋๋ฉด์.. ๋๋ฌผ์ ํ์ณค๋ค..
๊ธฐํํ์์ ์์ฑํ ํ๋ก์ฐ๋ฅผ ๋ฐ๋ผ๊ฐ๋ฉด์ ๋น์ฆ๋์ค ์ดํด๋ฅผ ํ๋ ์๊ฐ์ ๊ฐ์ก๋ค.
Class Component๊ฐ ์๋ Functional Component๋ฅผ ์ฌ์ฉํ ๊ฑฐ๋ผ๊ณ ์ ํด์ก๋ค.
- Functional Component๊ฐ ๋ณด๋ค Class ๋ฐฉ์๋ณด๋ค ์ข ๋ ๊ฐ๋จํ๊ณ , ์์ฆ ํธ๋ ๋๋ผ๊ณ ํ๋ค. Class ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ์์ฑ์๋ ์ฌ์ฉํ๊ณ , ComponentDidMount, Update, Delete ๋ชจ๋ ์ฌ์ฉํด์ผ ํ๋ฉฐ render()๋ฅผ ๋ช ์์ ์ผ๋ก ์ฝ๋์ ์์ฑํด์ผ ํ๋ค. Functional ๋ฐฉ์์ ๊ฒฝ์ฐ ์ด ๋ชจ๋ ๊ฒ๋ค์ด ๋นํ์ธ๋ ์ฌ์์ ์ผ์ด๋๋ค๊ณ ํ๋ค.
- ์๋ฐ๋ก ๊ฐ๋ฐ์ ์์ํ๊ณ ํ์ฌ์งํํ์ผ๋ก ์๋ฐ๊ฐ๋ฐ์๋ก ๊ฐ๋ฐํ๊ณ ์๋ ๋๋ก์๋ ํด๋์ค ๋ฌธ๋ฒ์ด ๋ ์ง๊ด์ ์ด๋ผ๊ณ ๋๊ปด์ง์ง๋ง.. ๊ทธ๋๋ ๋นํ์ธ๋ ์ฌ์์ ์ด๋ฃจ์ด์ง๋ ์์ฐ์ฑ๊ณผ ๊ฐ๋ ์ฑ์ ํฅ์๋ ๊ฒ ๊ฐ๋ค.
- ์ค์ ๋ก ํจ์ํ์ ํด๋์ค๋ณด๋ค ํ์ ๋์๊ธฐ์ ๋ ํธํ๋ค๊ณ ํ๋ค. ํจ์ํ์ state, lifeCycle ๊ด๋ จ ๊ธฐ๋ฅ์ ์ฌ์ฉ ๋ถ๊ฐ๋ฅํ์ง๋ง, ์ด๋ Hook์ ํตํด ํด๊ฒฐ๋๋ค๊ณ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ํด๋์คํ๋ณด๋ค ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ ์ฌ์ฉํ๋ค. ๋ํ ์ปดํฌ๋ํธ ์ ์ธ์ด ํธํ๋ค๋ ์ฅ์ ์ด ์๋ค. ๋จ ์์ ๋ฉ์๋๋ ์ ์ํ ์๋ ์๋ค.
- ํด๋์คํ๊ณผ ํจ์ํ ์ฐจ์ด
๊ทธ๋ฆฌ๊ณ ๋์ฅ๋์ด ๋ฆฌ์กํธ LifeCycle์ด ์ค์ํ๋ค๋ฉด์ ์ค๋ช ํด์ฃผ์ จ๋ค.
์ถ์ฒ: https://projects.wojtekmaj.pl/react-lifecycle-methods-diagram/
- Mount(์์ฑ): ์ปดํฌ๋ํธ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด, DOM์ ์ฝ์
๋ ๋ ์์๋๋ก ํธ์ถ๋๋ค.
- constructor()
- render()
- componentDidMount()
- Update: props๋ state๊ฐ ๋ณ๊ฒฝ๋๋ฉด render(๊ฐฑ์ )๊ฐ ์งํ๋๋ฉฐ ์์๋๋ก ํธ์ถ๋๋ค.
- render()
- componentDidUpdate()
- Unmount: ์ปดํฌ๋ํธ๊ฐ DOM์์ ์ ๊ฑฐ๋ ๋ ํธ์ถ๋๋ค.
- componentWillUnmount()
๋ฌ๊ธ์์ด ์คํ๋ง ๋น ์๋ช ์ฃผ๊ธฐ๊ฐ ์๊ฐ๋ฌ๋ค
- Mount(์์ฑ): ์ปดํฌ๋ํธ์ ์ธ์คํด์ค๊ฐ ์์ฑ๋์ด, DOM์ ์ฝ์
๋ ๋ ์์๋๋ก ํธ์ถ๋๋ค.
๊ณผ์ : ๋ฆฌ์กํธ ์ฌ์ฉํด์ JIB์ ๊ฒ์ ๊ฒฐ๊ณผ ํ์ด์ง ๊ตฌํ
๋ฐฑ์๋์๋ ํ์
- DB ๊ฒฐ์
- NoSQL(MongoDB): ์กฐํ ์ฑ๋ฅ์ด ์ข๋ค.
- SQL + Redis: RDB๋ ์กฐํ ์ฑ๋ฅ์ด ์์ข๊ธฐ ๋๋ฌธ์ Redis๋ฅผ ์ ์ ํ ์ฌ์ฉํด ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ์บ์ฑํด ์ฑ๋ฅ์ ๋์ผ ํ์๊ฐ ์๋ค.
- ์์์ฑ ํ๋ ์์ํฌ(Persistance Framework)
- MongoDB๋ฅผ ์ฌ์ฉํ ๊ฒฝ์ฐ, JPA์ฒ๋ผ ์ธํฐํ์ด์ค ์ ์ธ๋ง์ผ๋ก ์ฌ์ฉํ ์ ์๊ธฐ์ ๊ฐ๋จํ๋ค.
- SQL์ ์ฌ์ฉํ ๊ฒฝ์ฐ JPA๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ํ์๋ค.
- ๋ชฉํ
- ํ ์คํธ ์ฃผ๋ ๊ฐ๋ฐ(TDD)
- ํ์ฅ์ฑ ์๋(Scaleable) ๊ฐ๋ฐ