kkjim1324
수강평 작성수
-
평균평점
-
블로그
전체 3#카테고리
- 백엔드
![3주차 정리 [인프런 워밍업 클럽 0기 BE]](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2024. 03. 09.
0
3주차 정리 [인프런 워밍업 클럽 0기 BE]
3주차는 프로젝트 나머지를 진행하려고 했는데 시간이 너무 바빠 그동안 미뤘던 JAVA, Spring 개념 공부를 좀 더 하려고 한다.JAVAJVM운영체제 종속받지 않고 자바를 실행시켜주는 가상 컴퓨터이전에 C 개발 했을 때 윈도우랑 리눅스 돌아가는거 따로 구현함Java compiler.java(고수준언어 - 사람이 읽는 언어) -> .class(저수준언어) 로 변환시켜주는 프로그램JDK설치했을때 bin 안에 javac.exe 파일.class는 기계어는 아님(바이트코드) 그래서 JVM이 기계어로 읽을 수 있도록 해석해줌바이트 코드는 다시 실시간 번역기 또는 JIT 컴파일러에 의해 바이너리 코드로 변환GC가비지 컬렉션유효하지 않은 메모리를 JVM의 가비지 컬렉터가 불필요한 메모리를 알아러 정리C에서는 메모리 해제를 직접 해줘야했는데 이 부분이 너무 어려웠음아래 내용은 따로 가져옴JVM의 Heap영역은 처음 설계될 때 다음의 2가지를 전제(Weak Generational Hypothesis)로 설계되었다. 대부분의 객체는 금방 접근 불가능한 상태(Unreachable)가 된다. 오래된 객체에서 새로운 객체로의 참조는 아주 적게 존재한다. 즉, 객체는 대부분 일회성되며, 메모리에 오랫동안 남아있는 경우는 드물다는 것이다. 그렇기 때문에 객체의 생존 기간에 따라 물리적인 Heap 영역을 나누게 되었고 Young, Old 2가지 영역으로 설계되었다. 초기에는 Perm 영역이 존재하였지만 Java8부터 제거되었다. 출처: https://mangkyu.tistory.com/118JAVA 메모리 구조런타임 데이터 영역 5가지 존재메소드영역힙 영역스택 영역PC 레지스터Native Method Stack자바 프로그램을 실행하면 JVM은 OS로 부터 메모리를 할당받음JVM의 메모리 영역은 3가지스태틱(메소드) 영역 - Class , Static 변수, 생성자, 메소드 같은 것들을 저장. 종료시 해제힙 영역 - 참조형 데이터 저장되는 공간. 스택 영역의 실제 데이터들이 저장되어있음스택 영역 - 힘의 참조값(주소값), 기본 자료형, 메서드 내부 기본자료형 변수. 메서드 종료시에 메모리 삭제참조 : https://lucas-owner.tistory.com/38참조 글 일부 같은 기능을 하는 어플리케이션 일지라도, 메모리 관리에 따라 성능에 차이가 생긴다는 이야기다. 메모리를 관리하지 않고 구성하게 된다면 StackOverFlow 가 발생하여 어플리케이션이 종료될수도 있다는 말이다, 혹은 어플리케이션의 속도가 크게 저하 될수도 있다 + 회사 프로그램이 고객의 정보를 인메모리로 저장했다 메모리 부하가 온 적이 있음. 메모리가 아닌 캐싱으로 해결Spring어노테이션?코드의 특별한 의미, 기능을 수행하도록 하는 기술어노테이션 덕에 코드가 깔끔해짐참조 : https://velog.io/@rara_kim/Spring-%EC%96%B4%EB%85%B8%ED%85%8C%EC%9D%B4%EC%85%98AnnotationDI / IoC ?DI 의존성 주입AOP란?관점 지향 프로그래밍정리 : 각 로직 공통된 관심사 묶어서 사용 ex) 로깅Bean, Component?참조 : https://giron.tistory.com/91DB인덱스(INDEX)색인. 특정 컬럼 기준으로 정렬해놓은 상태DB의 일부 사용량을 차지함저장성능보단 조회 성능을 올림인덱스 자료구조B+Tree자식노드가 2개 이상인 B-Tree를 개선시킨 자료구조BTree LeafNode를 LinkedList로 연결하여 순차 검색을 용이하게 만듬.해시테이블보다는 나쁜 시간복잡도지만, 일반적으로 사용되는 구조해시 테이블컬럼의 값으로 생성된 해시를 기반으로 인덱스 구현시간복잡도 Map처럼 O(1)부등호() 같은 연속적인 데이터 순차 검색이 불가능하기 떄문에 사용에 적합하지 않음인덱스 효율성인덱스는 한 테이블당 보통 3~5개가 적당(정규화, 테이블 목적에 따라 개수가 달라짐)카디날리티(중복정도)가 높으면 인덱스 설정에 좋은 컬럼카디날리티가 높다 - 중복도가 낮다(값들이 대부분 다르다 - 고유한 학번)카디날리티가 낮다 - 중복도가 높다(값들이 대부분 같다 - 나이)선택도가 낮아야 인덱스 설정에 좋은 컬럼(일반적으로 5~10%퍼)선택도가 낮다 - 한 컬럼이 갖고있는 값 하나로 적은 row가 찾아진다(카디날리티 높은것과 동일)선택도 계산 10개 데이터 학번 모두 고유, 이름 2씩 같음, 5명씩 나이가 같음 학번 1/10 = 10% 이름 2/10 = 20% 나이 5/10 = 50% 그러므로 학번이 인덱스 설정에 좋은 컬럼조회 활용도 ↑ , 수정 빈도 ↓ - 위 내용 때문에링크 : https://velog.io/@jwpark06/효과적인-DB-index-설정하기참고 링크 : https://dev-coco.tistory.com/158그 외쓰레드동시성 - 하나의 코어 / 멀티 쓰레드병렬성 - 여러개 코어 / 단일 쓰레드후기...참 열심히 여러 가지를 많이 하고 싶었지만 병행은 쉽지 않았다..그래도 포기하기 않고 끝까지 완주가 목표기 때문에 완주를 했다면 나름 목표는 달성했다는 생각이다앞으로도 이런게 많이 나왔으면 좋겠다1기가 나오면 주변 사람들에게 추천할 예정
![2주차 정리 [인프런 워밍업 클럽 0기 BE]](https://cdn.inflearn.com/public/main/blog/default_thumbnail.png?w=260)
2024. 03. 03.
0
2주차 정리 [인프런 워밍업 클럽 0기 BE]
인프런 워밍업 클럽 0기 2주차 발자국이번 주 공부한 내용 정리설명은 다른 글을 그대로 옮겨쓰는 것 같아 참조로 대체트랜잭션트랜잭션에 대한 개념은 알고스프링에서 어떻게 적용하는지 간단하게 배웠다@Trantional 어노테이션 공부 참조https://imiyoungman.tistory.com/9AOP 통해 구현되어있다는 점도 배웠다플로우는 추후 좀 더 깊게 파 볼 예정이다영속성 컨텍스트설명은 다른 글 참조https://ittrue.tistory.com/254결국 영속성 컨텍스트에 대한 이해가 JPA전문성의 큰 기준이 될 것 같다경력 연차가 쌓였을 때 면접으로 물어볼 만한 것이 아주 많다고 느껴 이 부분에 많은 시간 투자가 필요해보인다이 후 영속성 컨텍스트에 대해 따로 게시글을 올려 정리해야 할 것 같다연관관계 매핑개념에 대해서는 수업 내용과 아래 글이 도움이 많이 됐다(수업 내용은 유료 강의 이기 때문에 마음대로 적으면 안될 것 같아 따로 작성 X)https://velog.io/@goniieee/JPA-OneToMany-ManyToOne%EC%9C%BC%EB%A1%9C-%EC%97%B0%EA%B4%80%EA%B4%80%EA%B3%84-%EA%B4%80%EB%A6%AC%ED%95%98%EA%B8%B0JPA N+1쿼리가 여러 번 실행 되는 것 같다해결 방법 참조 글https://programmer93.tistory.com/83이후 리팩터링 때 챙겨갈 예정P.S회사를 다니면서 과제, 공부하려니 시간투자하기가 정말 힘들었다...이번 스터디 클럽에 최대한 많은 힘을 쏟아붓지만 아직도 많이 부족하다 생각이 든다좀 더 잘 만들고 싶었지만 짧은 시간에 최대한으로 투자했던 것 같다회사갔다와서도 새벽까지 개발하면서 예전 대학생 때 과제하던 느낌오랜만에 새벽까지 집중하며 한 개발이라 재밌긴 했다
![1주차 강의&미션 정리 [인프런 워밍업 클럽 0기 BE]](https://cdn.inflearn.com/public/files/blogs/31ef0a59-4cc9-48ae-9f25-f793dac4b5ad/image.png?w=260)
2024. 02. 24.
0
1주차 강의&미션 정리 [인프런 워밍업 클럽 0기 BE]
개요회사에서 자바, 스프링을 사용하지 않아 이직하는데 많은 어려움을 겪는 것 같았다.이 기회에 스프링을 제대로 배우고자 신청하게 되었다. 1주차 강의 수강1주차 강의는 많이 듣고 봐왔던 것도 있지만, 구체적은 개념은 잘 몰라 어느정도 찾아보면서 배운게 많았다.당연히 아직 배울게 많지만 이번에 특히 어노테이션에 대해서는 많은 공부를 하게 되었다. 미션과제 구현은 사실상 가장 기본적인 단계로 컨트롤러에서 모든 걸 해내는 정도라 크게 어려운 건 없었다.클린코드는 범위를 어디까지 할 지 고민이었지만 하드코딩에 대한 소스 수정만 했다(시간도 없고 너무 많은 고민을 하기엔 할게 너무 많아서... 핑계인가...)질문에 대한 답변을 작성할 때 많은 개념을 얻을 수 있었다. 1일차 - 어노테이션어노테이션을 그냥 참고하면서 쓰라는대로 썼는데 이번 기회에 좀 더 구체적으로 알게 되었다.요약하자면, "어노테이션은 스프링에서 인터페이스를 좀 더 참조하기 쉬운 형태로 제공한다" 라는 것으로 보인다(정확한 의미는 아니다)제공하는 어노테이션이 많은데 그 종류를 잘 정리한 글이 있어 따로 첨부했다. 어노테이션 종류 정리 글https://sddev.tistory.com/225메타 어노테이션https://sanghye.tistory.com/39 3일차 - 자바 람다의 등장배경자바8 부터 자바 람다식을 제공해 주는게 큰 변화였다.람다식의 등장 배경은 결국 "불편한 걸 더 편하게. 코드를 더 간결하고 보기 좋도록"하기 위해 생겼다고 생각한다.간단한 함수 사용은 사용자가 더 간결하고 유지보수가 용이해지도록 변했다고 생각한다.그로 인해 익명 클래스-함수 제공에서 람다식이 나오게 됐다고 생각이 들게 되었다. 자바 람다식 정리 게시글https://jiwon0813.tistory.com/14 5일차 - 클린코드위에서 한 번 설명한대로 이번 클린코드 과제는 하드코딩 제거, 입력값에 대한 유연한 대응, 역할에 따른 함수 분리만 했다.클래스, 패턴, 값객체 등 객체 지향에 따른 소스 수정까지 해보려 했지만,이번 클린코드에서 원하는 목표는 하드코딩과 역할 분리 정도로 보여 그에 맞게 작성했다. 클린코드 소스https://github.com/JIWON0813/warming-up-study/tree/master/src/main/java/com/group/libraryapp/homework5
백엔드




