분류 전체보기 110

[programmers lv2.python] 이진 변환 반복하기 풀이 (리팩토링 다..수..)

https://school.programmers.co.kr/learn/courses/30/lessons/70129 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr문제 1차 풀이 (리팩토링 전) 👉 정답def solution(s): count_zero = 0 count_binary = 0 while s != '1': # 0의 갯수 카운트하고 s의 모든 0 제거 count_zero += s.count('0') s = s.replace('0', '') # s를 s의 길이(c)..

[Python] 리스트와 딕셔너리의 차이

오늘은 알고리즘 문제를 풀어오며 머리속에 둥둥 떠다니던 리스트와 딕셔너리의 개념을 확실히 정립하고 넘어가고자 포스팅을 작성해보려고 한다. 리스트와 딕셔너리 각각의 개념을 예시와 함께 정리하고, 이 둘의 차이와 활용 방법, 더 나아가 리스트와 딕셔너리를 어떻게 조합해서 쓸 수 있을까 까지 정리해보겠다 😋 ✏️ 리스트란?여러 가지 값을 순서대로 저장할 수 있는 데이터 구조이다. a = [1, 5, 2]b = [3, "a", 6, 1]c = []d = list()같은 자료형도 들어갈 수 있고, 다른 자료형도 들어갈 수 있다. 또한 리스트의 길이는 len() 함수를 사용해서 잴 수 있다.a = [1, 5, 2]print(len(a)) # 출력값: 3b = [1, 3, [2, 0], 1]print(len(b..

[프로젝트 회고] 뉴스피드 개인 프로젝트를 마치며

약 6주간의 시간 동안 진행했던 내 첫 번째 개인 프로젝트가 드디어 끝났다. 100% 내가 해야하는 모든 기술적 의사결정과 처음 써 보는 스택들로 설렘 반 막막함 반이었던 개인 플젝이였다. 개발이 잘 풀렸던 적도 있었고 생각했던 대로 안 풀렸던 적도 있어서 힘들 때도 있었지만, 같은 주제로 프로젝트를 진행했던 동료들이 있어서 도움을 주고 도움을 받으며 중간에 포기하지 않고 무사히 끝낼 수 있었다고 생각한다. 이 타이밍에 프로젝트를 하면서 느꼈던 점들을 정리하고 되돌아보면서, 다음 프로젝트 땐 어떻게 더 발전할 수 있을지 회고해보는 시간을 가져보려 한다. 📌목적기여도 100%의 개인 프로젝트를 진행해보면서, 소프트웨어 설계부터 개발, 테스트까지 전반적인 진행 과정을 모두 경험해보는 것직전에 진행했던 팀 ..

Project/Newsfeed 2024.04.25

[TIL][OS] 프로세스와 스레드의 차이

전에 심포지엄 주제로 멀티 프로세스와 멀티 스레드의 개념과 그 차이에 대해서 공부했었는데, 그때는 프로세스와 스레드가 뭔지 기본적인 개념 정도만 짚고 넘어갔었다.그게 아쉬워서 오늘은 단순한 개념을 넘어, 프로세스의 상태 값들과 메모리 구조는 어떻게 되있는지, 그 각각의 구조는 뭔지 등을 공부해보면서 프로세스와 스레드에 대해 깊고! 자세하게 공부한 것을 기록해 볼 생각이다. 프로세스란?프로세스(Process)는 컴퓨터에서 실행되고 있는 프로그램을 말한다. * task (CPU 스케쥴링의 대상이 되는 작업) 라는 용어와 거의 같은 의미로 쓰인다. 문장으로만 보면 다소 추상적으로 느껴질 수 있기에 그림으로 예를 들어서 설명해보겠다. 위의 그림처럼, 프로그램이 메모리에 올라가면 프로세스가 되는 인스턴스화가 일어..

Computer Science 2024.04.24

[Python] 변수의 mutable과 immutable의 차이

요새 아침마다 알고리즘 스터디를 하면서, 그날 그날 레벨이 높은 문제가 당첨될수록 내 힘으로 풀지못하고 구글링의 힘을 빌리는 날이 많아지고 있다. 그래서 얼렁뚱땅 푸는 게 아닌 정말 기초부터 탄탄히 하고 싶어서 프로그래머스의 코딩 기초 트레이닝 124 문제를 하루에 되는 대로 많이 풀고 있다. 오늘은 문득 문제를 풀면서 이 값은 저장을 해줘야돼 말아야돼? 고민하다가 이 참에 정리를 하고 확실히 한 후 넘어가려고 포스팅 해보려한다. 일단 다들 알고 있겠지만. 변수란? 변수(Variable)는 프로그램의 처리 과정에서 데이터를 담아둘 수 있는 메모리의 공간을 의미한다. 하나의 변수에는 하나의 값만 저장할 수 있고, 이 값은 변할 수 있기 때문에 뜻 그대로 '변수' 라고 하는 것이다. * 변수 이름 짓는 팁 ..

[프로젝트] Service, ServiceImpl 구조에 대한 내 생각과 결론 (부제: 이유없는 리팩토링을 지양하자)

프로젝트 기능 구현을 마무리 하고, 성능 테스트 및 성능 향상을 위한 리팩토링을 끝낸 후 다른 리팩토링 거리(?)를 찾고 있었다. 그러다 전에 진행한 팀 프로젝트에선 Service 레이어 계층을 인터페이스와 그 구현체로 분리해서 개발했었는데, (부끄럽지만 그 땐 제대로 된 이유도 모르고 강사님께서 이게 좋다! 라고 하시는 걸 무작정 따라만 했었다) 이번 개인 프로젝트에서는 서비스 계층 추상화를 따로 진행하지 않은 점이 생각났다. 그래서 왜 사람들이 Service 인터페이스와 그 구현체를 분리해서 추상화하는지 이유를 생각해보고 내 프로젝트에 적용해보는 과정까지 진행해보려 한다. (결론부터 말하자면 구현체 분리는 하지 않기로 결정함) 먼저 기존 코드와 분리 후 코드를 비교해보면 이렇다. (예시)🔹분리 전 ..

Project/Newsfeed 2024.04.19

[성능 테스트][트러블슈팅] Artillery로 부하 테스트 하기(3/3), 성능 개선을 해보자

[성능 테스트][트러블 슈팅] Artillery로 부하 테스트 하기(2/3), 성능 저하 원인을 찾아보자[성능 테스트] Artillery로 부하 테스트 하기(1/3), Artillery 설치현재 진행하고 있는 뉴스피드 프로젝트의 기능들을 얼추 마무리하고 나서, 문득 내가 구현한 한 api에 대한 성능을 평가해보고 확장성developer-jinnie.tistory.com 지난 글에서는 성능 테스트를 진행한 후에, 성능 저하 원인을 인지하고 이를 해결하기 위해서 어떤 방법들이 있을지 생각해봤다. 이번 글에서는 이 방법들을 이용해서 성능 개선을 해나가는 과정과 결과를 담아보려 한다! ++ 모든 테스트는 외부적인 요인이 결과에 영향을 주지 않도록 동일한 환경에서 진행했다.시도 방법 1 - fetch join  ..

Project/Newsfeed 2024.04.15

[성능 테스트][트러블 슈팅] Artillery로 부하 테스트 하기(2/3), 성능 저하 원인을 찾아보자

[성능 테스트] Artillery로 부하 테스트 하기(1/3), Artillery 설치현재 진행하고 있는 뉴스피드 프로젝트의 기능들을 얼추 마무리하고 나서, 문득 내가 구현한 한 api에 대한 성능을 평가해보고 확장성을 검증해보기 위해 부하 테스트를 진행해 보기로 했다. 개developer-jinnie.tistory.com지난 글에서는 부하 테스트를 위한 툴을 정하고 간단한 테스트를 진행해 봤다.이번 글에서는 특정 API에 대해 부하 테스트를 진행한 후 결과를 분석해보는 시간을 가져보려 한다. 게시글 기능이 유저, 댓글, 게시글 좋아요, 멀티미디어 등 여러 엔티티와 연관관계로 묶여있는데다가 피드 서비스의 핵심 기능이기 때문에 게시글 전체 목록을 보여주는 '게시글 전체보기 API'를 선택해서 부하를 주어 ..

Project/Newsfeed 2024.04.13