1. synchronized란?한 번에 하나의 스레드만 객체의 synchronized 메서드에 접근할 수 있도록 보장하는 키워드 2. 기본 개념먼저 클래스와 객체를 이해해야 함클래스: 변수 + 메서드로 구성된 객체의 설계도객체: 클래스로부터 생성된 변수, 메서드를 가짐이 메서드에 synchronized를 붙일 수 있음 3. 동작 원리public class Account { private int balance = 0; public synchronized void deposit(int amount) { balance += amount; } public synchronized void withdraw(int amount) { balance -= a..
분류 전체보기
·JAVA
0. 참고자료https://www.youtube.com/watch?v=62BgiOhEoYg&t=6s 1. 싱글, 멀티쓰레드 싱글 스레드- 하나의 쓰레드로작업을 순차적으로 처리멀티 스레드- 여러 쓰레드로 작업을 동시에 처리 (병렬 또는 동시성) 2. 블로킹 vs 논 블로킹블로킹- 스레드가 I/O 등의 작업 완료를 기다리며 대기하는 상태논블로킹- 작업 요청 후 즉시 반환되어 대기 없이 다른 작업을 수행할 수 있는 상태 멀티 스레드 환경- 특정 스레드가 블로킹되어도 다른 스레드를 실행할 수 있어 CPU 자원 활용률 향상 2-1 간단한 예시CompletableFuture : 비동기 결과를 담는 도구 supplyAsync: 비동기로 작업을 시작하고 결과를 반환thenAccept : 결과를 받으면 처리 우..
0. 출처https://www.youtube.com/watch?v=ucJhWVUURCY&list=PLW2UjW795-f4dHD3VADsvH7ZkPuFAF7Vo&index=78 1. 실행 코드쓰레드는 두 가지 방법을 통해 실행 가능Thread 클래스를 상속Runnable 인터페이스를 구현 2. 사용 방법Thread 클래스를 상속 Main 메서드와 Thread 클래스를 상속하여 구현한 클래스가 현재 다른 쓰레드로 구현돼있음을 알 수 있다.Main 메서드의 쓰레드 Name : mainThread 클래스의 쓰레드 Name : main그리고 결과를 보면 현재 이 두 개의 쓰레드가 서로 순차적으로 처리되는 것이 아니라 비동기처리됨을 알 수 있다. 3. start vs run 근데 왜 쓰레드를 실행시킬 때 , 구..
·프로젝트
GitHub - mmingoo/Musinsa-Benchmarking: 무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다.무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다. Contribute to mmingoo/Musinsa-Benchmarking development by creating an account on GitHub.github.com 0. 들어가기추천 상품 목록을 가져올 때 xml 코드는 다음과 같다. 그리고 상품 더미데이터는 약 6만개임을 참고 바란다. 1. 문제점 파악1.1 코드 설명해당 코드는 성별에 따라 여러 지표에 가중치를 적용한 추천 점수를 계산하여 상품을 조회하는 코드이다. 주문 수량 합계(0.3), 리뷰 개수(0.2), 좋아요 수(0.2), 베이지안..
·프로젝트
GitHub - mmingoo/tax-cahtbot-server: RAG & Langchain 을 활용하여 구현한 세금 챗봇입니다RAG & Langchain 을 활용하여 구현한 세금 챗봇입니다. Contribute to mmingoo/tax-cahtbot-server development by creating an account on GitHub.github.com 세금 법률 챗봇 구현 0. 프로젝트 시작13개의 세금 관련 법률을 기반으로 답변하는 AI 챗봇을 개발하게 되었다. 처음에는 정확한 답변에만 집중했는데, 막상 만들어보니 평균 응답 시간이 25초나 걸렸다. 사용자가 질문하고 25초를 기다린다는 것은 사실상 서비스가 불가능한 수준이었다. 1. 처음 구조 : Self-RAG Self-RAG를 ..
·cs
캐시 전략엔 어떤 게 있는지 살펴보도록 하겠다. [읽기 전략]Cache Aside : 요청이 먼저 들어오면 서버에서 캐시에 데이터가 있는지 확인 후에 없다면 서버가 DB에서 데이터를 불러와 이를 캐시에 저장하는 방식이다. 이러한 과정을 애플리케이션이 제어하는 방식이다. Read Through : 요청이 먼저 들어오면 서버에서 캐시에 데이터가 있는지 확인 후에 없다면 캐시가 DB에서 데이터를 불러와 이를 캐시에 저장하는 방식이다. 이러한 과정을 캐시가 책임지도록 설정하는 방식이다. [쓰기 전략]Write Around Aside : 요청이 들어오면 DB에만 데이터를 저장하는 방식 Write Through : 캐시와 DB에 동시에 데이터를 저장하는 방식 Write Back :..
·프로젝트
GitHub - mmingoo/tax-cahtbot-server: RAG & Langchain 을 활용하여 구현한 세금 챗봇입니다RAG & Langchain 을 활용하여 구현한 세금 챗봇입니다. Contribute to mmingoo/tax-cahtbot-server development by creating an account on GitHub.github.com 세금 챗봇 시연영상 0. 들어가기에 앞서Redis 엔 다양한 전략이 존재합니다. 다음은 캐시 전략이 뭐가 있는지 정리한 글이다. 해당 글에서는 챗봇 히스토리 유지, 채팅방에 입장했을 때 최근 대화내역을 불러오는 거라 Cache-Aside 방식을 사용하였다. 2025.11.26 - [cs] - [CS] 캐시 전략의 종류 [CS] 캐시 전략의 ..
0. 참고자료https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 29,838명인 강의를 만나보세요. 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고,www.inflearn.com 1. Front Controller 도입 배경여러 서블릿이 있고, 각 서블릿마다 공통 로직(인증 체크, 권한 확인, 로깅, 인코딩 설정 등)이 필요한 상황이었습니다. 문제점:서로 다른 서블릿이 호출될 때마다 공통 로직도 중복 실행같은 코드가 모든 서블릿에 반복적으로 작성됨공통..
2025.11.24 - [Spring/Spring Boot] - [Spring Boot] Front Controller 패턴이란? [Spring Boot] Front Controller 패턴이란?0. 참고자료https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 29,838명인 강의를 만나보세요. 웹 애플리케이aibigdata-study.tistory.com 위 내용이 다음 내용 중에 나오니 참고하길 바란다.참고로 다음 자료는 김영한 - spring MVC1 강의에서 가져온 것이다. 1. Spring Boot 란?Spring Boot = 내장..
0. 참고자료https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술| 김영한 - 인프런 강의현재 평점 5.0점 수강생 29,838명인 강의를 만나보세요. 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고,www.inflearn.com 1. 서블릿 탄생배경 서버에도 http 요청을 받아 반환하는 과정이 매우 복잡실제 서비스 로직을 실행하기 위한 부분은 초록색 상자에 한함 이 복잡한 과정을 제거하고 개발자가 핵심 비즈니스 로직을 실행시켜 주도록 해주는 게 서블릿 2. 서블릿 동작방식 (1). 요청 수신웹..
무신사 벤치마킹 시연 영상 0. 깃허브 링크:https://github.com/mmingoo/Musinsa-Benchmarking GitHub - mmingoo/Musinsa-Benchmarking: 무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다.무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다. Contribute to mmingoo/Musinsa-Benchmarking development by creating an account on GitHub.github.com 1. 적용대상Redis 는 자주 조회되는 데이터를 저장할 때 성능을 발휘할 수 있다. DB 와의 커넥션을 줄여서 성능을 획기적으로 향상시킬 수 있기 때문이다. 현재 무신사 프로젝트에서 모든 회원이 공통적으로 조..
0. 깃허브 링크https://github.com/mmingoo/Musinsa-Benchmarking GitHub - mmingoo/Musinsa-Benchmarking: 무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다.무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다. Contribute to mmingoo/Musinsa-Benchmarking development by creating an account on GitHub.github.com 1. 들어가며 이번 커널 아카데미에서 진행된 토이프로젝트의 주제는 쇼핑몰 벤치마킹이었다. 나는 프로젝트를 진행할 때 해당 분야 및 업무에 대한 이해가 있어야지 제대로 된 설계와 프로젝트를 진행할 수 있다고 믿는 사람이기 때문에 팀장인 나는 ..
무신사 벤치마킹 0. 깃허브 링크https://github.com/mmingoo/Musinsa-Benchmarking GitHub - mmingoo/Musinsa-Benchmarking: 무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다.무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다. Contribute to mmingoo/Musinsa-Benchmarking development by creating an account on GitHub.github.com 1. 개요현재 product 를 좋아요할 때 중간 테이블은 user_product_likes 테이블에 어떤 유저가 어떤 product 를 좋아요 눌렀는지에 대한 이력이 추가되고, 동시에 products 테이블의 product..
0. 깃허브 링크https://github.com/mmingoo/Musinsa-Benchmarking GitHub - mmingoo/Musinsa-Benchmarking: 무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다.무신사 벤치마킹 팀프로젝트 혼자 성능 개선을 진행해보았습니다. Contribute to mmingoo/Musinsa-Benchmarking development by creating an account on GitHub.github.com 1. 개요무신사 벤치마킹 토이프로젝트의 기능 구현이 대부분 마무리돼가서 성능 개선을 하기 위해 과부하 테스트를 진행하였다. 실제 무신사는 블랙 프라이데이와 같은 이벤트가 있는 경우 수십만의 트래픽이 몰리는 대용량 트래픽을 견뎌내는 견고한 사..
토이프로젝트 2주차가 되면서 화면도 점점 나오기 시작했다. 처음 프로젝트를 해보는 팀원들이 많아서 팀장으로서 알려줘여 하는 것들과 이끌어야 하는 것들이 너무 많지만,팀원들이 잘 따라와줘서 항상 고마울 뿐이다. 다음은 이번주 동안에 내가 개발하고, 화면 연동한 것이다. 메인화면, 주문서 화면, 주문하기 조회 등을 기능하였다. 아침엔 자바, RAG, 디자인 패턴 , 코딩 테스트 알고리즘 등 같이 병행하고 있다. 앞으로 아침엔 공부 대신 , sql 튜닝 등과 더불어 우리가 진행하는 프로젝트에 적용시키기 위해 공부를 조금은 해야할 거 같다.
0. ERDhttps://www.erdcloud.com/d/7oLQ2LsyDCxWJAMae 무신사-벤치마킹 프로젝트Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.www.erdcloud.com 1.무엇이 문제이거나 무엇이 이해가 되지 않는지?평점 조회의 경우, 리뷰 테이블에서 실시간으로 집계해서 추출해야 하는지, 평점 집계 테이블을 따로 둬서 조회해야 하는지가 고민이었다. 2. 무엇이 문제였거나 혹은 어떻게 해결하였는지??문제점 분석리뷰 테이블에서 평점을 실시간 집계하는 경우, 상품 목록 조회마다 해당 상품들의 평점을 매번 계산해야 하기 때문에 성능이 좋지 않..
0. ERDhttps://www.erdcloud.com/d/7oLQ2LsyDCxWJAMae 무신사-벤치마킹 프로젝트Draw ERD with your team members. All states are shared in real time. And it's FREE. Database modeling tool.www.erdcloud.com 1. 무엇이 문제이거나 무엇이 이해가 되지 않는지?상품 목록 조회 시 좋아요 수를 효율적으로 가져오는 방법에 대한 고민이 있었다. 상품 테이블에 직접 like_count 컬럼을 추가할지, 아니면 별도의 통계 테이블을 운영하여 좋아요 데이터를 관리할지 결정해야 했다.좋아요 기능의 API 설계 방식에 대한 고민도 있었다. 현재 상태에 따라 좋아요/취소를 자동 처리하는 하나의 토..
어느덧 토이프로젝트 2주차다 1주차는 모델링을 진행하였고, 2주차엔 모델링한 테이블을 바탕으로 기능들을 구현하였다. 우리팀은 MyBatis 로 진행하였다. 결국 해당 토이프로젝트를 진행하는 목적은 취업이고, 어떻게 하면 취업이 잘될까를 고민하다가 남들이 하지 않는 차별점을 가진다면취업하는데에서 큰 이점을 차지할 수 있을 것이라고 생각하였다. 팀장인 나도 MyBatis는 처음이라 걱정이 많았지만.. 막상 해보니까 된다!! 우리는 튜딩, 모델링, sql 쿼리 작성에 집중하기로 전략을 세웠다.근데 짧은 기간에 이 모든 것을 해야했기 때문에 모든 CRUD 대신 핵심적인 부분 구현을 집중하고, 해당 기능 최적화에 집중하기로 했다. 프로젝트가 진행됨에 따라 밤 늦게 까지 개발하느라 다음날 아침에 8시에 학원이..
이번 주에 토이프로젝트1을 진행하였다.. 쇼핑몰 벤치마킹이 주제였고, 이에 대해서 토이프로젝트1,2,3 이 진행된다. 토이프로젝트1은 ERD 설계가 메인 주제였다. 우리 팀은 무신사를 벤치마킹 하기로 했는데... 무신사의 수많은 기능들을 보고 멘붕.. 무신사의 기능 우리가 구현해야할 기능들을 줄이는 것을 목표로 하고화면 정의서부터 만들었다. 화면정의서에 정의된 화면은 10개 정도였고, 해당 화면에 대한 모든 기능들을 바탕으로 ERD 설계를 진행하였다그런데... 테이블만 70개가 나와버린 것.. 기능 하나하나를 구현해가면서, 조건들이 무엇이 있고, 기능이 어떤 식으로 흘러가고, 데이터가 많아졌을 때 혹은 사용자가 많아졌을 때를 고려한 테이블 설계를 하다보니 70개의 테이블이 만들어졌다. 그러다 보..
어느덧이 12주차도 지나갔다 그 동안 참 많은 것을 배워왔고, 모두 다 중요한 내용들이었다. 항상 무엇을 1순위에 두고 공부해야 할까, 어떤 방식으로 공부 해야할까에 대한 고민도참 많이 해왔다. 그러면서 이번주는 수 많은 걱정과 생각, 그리고 다음주부터 시작될 팀프로젝트 팀원 매칭 때문에 분위기가 어수선한 것 까지 합쳐져공부에 집중을 잘하지 못했던 거 같다. 그래도 이번주에 한 방확 때문에 앞으로 어떤 공부를 중심으로 해야하는지 조금은 감을 잡은 거 같다.자바 , SQL, 설계 및 모델링, 랭체인 이다 물론 스프링도 중요하긴 하지만, 스프링은 결국 자바로 개발을 좀 더 쉽게 하기 위한 도구임을 깨달아서,스프링에 익숙해지기 전 부터 자바와 설계, 데이터베이스가 더 중요함을 깨달을 수 있는 일주일이었..
"똑같은 기능의 객체를 매번 새로 만들지 말고, 하나를 재사용하자!" 는 것이 해당 글의 핵심 1. String 객체 생성 - 나쁜 예와 좋은 예나쁜 예:String s = new String("bikini"); // 매번 새 객체 생성new 키워드를 사용하면 무조건 새로운 객체를 힙 메모리에 생성같은 내용의 문자열이어도 매번 새로운 메모리 공간 차지반복문이나 자주 호출되는 메서드에서 사용하면 메모리 낭비 심각좋은 예:String s = "bikini"; // 하나의 인스턴스 재사용문자열 리터럴은 String Pool에 저장되어 같은 값이면 같은 객체 참조JVM이 자동으로 중복을 제거해서 메모리 효율적 2. 정적 팩토리 메서드 활용생성자 사용 X:Boolean b = new Boolean("true"..
1. 개요많은 클래스는 하나 이상의 자원에 의존한다.예를 들어 맞춤법 검사기는 사전에 의존한다.이런 클래스를 정적 유틸리티 클래스로 구현한 모습을 드물지 않게 볼 수 있는데, 이런 경우는 유연하지 않고 테스트 하기 어렵다.참고) 정적유틸 클래스란?정적 유틸리티 클래스는 인스턴스를 생성하지 않고 정적 메서드만으로 기능을 제공하는 클래스. - 모든 메서드가 static - 생성자를 private으로 막아서 인스턴스 생성 방지 - 상태(인스턴스 변수)를 가지지 않음 2. 잘못된 접근법들2-1. 정적 유틸리티 클래스 사용코드 5-1 정적 유틸리티를 잘못 사용한 예 - 유연하지 않고 테스트하기 어렵다.public class SpellChecker { private static final Lexicon ..
이번 주에 한 일 시간이 너무너무너무 빠르다....해야할 것도 너무너무 많다... 이번 주엔 다음을 지키려고 노력했다. 자바 아침 저녁 30분 복습,이펙티브 자바 복습, 디자인 패턴 복습,자바스크립트 & 리액트,랭체인 공부, 그리고 더불어 내가 기존에 했던 프로젝트가 있는데,강사님께 배웠던 SQL 로 성능최적화 리팩토링 해보려고 한다.잘할 수 있겠지..? 다음은 이번 주에 작성한 블로그 글이다.https://aibigdata-study.tistory.com/entry/%EB%94%94%EC%9E%90%EC%9D%B8%ED%8C%A8%ED%84%B4-%EA%B5%AC%EC%A1%B0%ED%8C%A8%ED%84%B4-%EB%B8%8C%EB%A6%BF%EC%A7%80-%ED%8C%A8%ED%84%B4Br..
1. 문제 상황정적 메서드와 정적 필드만을 담은 클래스(Arrays, Collections 등)가 존재한다.이런 유틸리티 클래스는 인스턴스로 만들어 쓰려고 설계한 것이 아니다. 하지만 생성자를 명시하지 않으면 컴파일러가 자동으로 기본 생성자를 만든다.즉, 매개변수 없는 public 생성자가 생성되는데, 사용자는 이게 자동 생성된 것인지 구분할 수 없기 때문에해당 생성자가 인스턴스 생성용으로 만들어진 것으로 착가할 수 있는 문제도 발생할 수 있다. 이처럼 공개 API도 의도치 않게 인스턴스화할 수 있게 된 클래스를 찾아볼 수 있으며, 이러한 상황을 막아야 한다. 2. 다른 방법들의 한계2-1. 추상 클래스의 한계추상 클래스의 경우 직접 인스턴스화는 불가능하지만,하위 클래스를 만들어서 그 하위 클래스를 인스..
1. 개요선택적 매개변수가 많을 때 정적 팩터리와 생성자 모두 매개변수가 많을 때는 대응하기 어렵다.선택적 매개변수가 많을 때의 문제점을 예시살펴보겠다. 2. 문제점예시 상황: 피자 주문 시스템public class Pizza { private int size; // 필수 - 크기 (인치) private boolean cheese; // 선택 - 치즈 private boolean pepperoni; // 선택 - 페퍼로니 private boolean bacon; // 선택 - 베이컨 private boolean ham; // 선택 - 햄 private boolean mushroom; /..
1. 개요객체를 생성하는 방식엔 크게 2가지 방식이 존재한다.생성자를 사용하는 방식정적 팩토리 메서드를 사용하는 방식이 두가지 방식에서 책은 생성자 방식 대신 정적팩토리 메서드를 고려한 객체 생성을 권장한다. 정적 팩토리를 사용하여 객체를 생성해야 하는 이유와, 이 때의 장점과 단점에 대해서 간략하게 살펴보자(참고로 디자인 패턴에서 말하는 팩토리 메서드와 다른 것임을 유의하자)2. 정적 팩토리 메서드 장점2-1. 이름을 가질 수 있다 객체 생성 수단에 이름을 가지게 된다면, 객체 생성시 생성수단의 이름(메서드의 이름)을 통해 객체에 대한 특성을 쉽게 묘사할 수 있음다음 코드에서 후자(BigInterger.probablePrime()) 이 객체의 특성을 더욱 잘 묘사한다. new BigInteger(int..
1. 컴포짓 패턴 이란?그룹 전체와 개별 객체를 동일하게 처리할 수 있는 패턴클라이언트 입장에서는 ‘전체’나 ‘부분’이나 모두 동일한 컴포넌트로 인식할 수는 계층 구조 를 만든다. (Part-Whole Hierarchy)2. 컴포짓 패턴 사용 목적개별 객체와 그룹을 똑같이 다루기 위해서 예시: 파일 시스템개별 객체: 파일그룹: 폴더 (파일들을 담고 있음)// 컴포짓 패턴으로 구현한다면 둘 다 똑같은 방식으로 처리 가능(파일 크기 구학, 압축하기, 삭제하기 등)// 크기 구하기file.getSize(); // 파일 크기folder.getSize(); // 폴더 안 모든 파일 크기 합계// 압축하기file.zip(); // 파일 압축folder.zip(); // 폴더 안 모든 파일 압축//삭제..
이번 주 목표쓰레드 파트 & 지네릭스 파트 끝내가기 - 쓰레드 파트 끝냄디자인 패턴 마무리하기 - 끝남이력서 문구 생각해보기 - 완료딥러닝 숙제 완수하기 - 완수타입크립트 - 중단 , 자바 스크립트로 수행중코테 준비하기 - 실패, 다음주 월요일부터 풀어볼 예정sql 준비하기 - 완료블로그 글 4개 작성하기 - 실패, 한 개 씀 이번 주 회고이번 주에 스프링 프레임워크, 자바스크립트에 대한 진도가 나갔다.이와 더불어 sqld 시험 , 졸업식이 겹치는 바람에 내가 계획한 모든 것을 이루지는 못했다. 다음주 계획을 세우며, 모든 계획을 성공하진 못하더라도, 달성하며 공부해나가려고 노력하자... 여태까지 돌이켜봤을 때 , 공부한 시간과 효율은 나쁘지 않았지만, 딱 그 정도였다. 앞으로 프로젝트 나가기 전..
1. 브릿지 이란?추상적인 것과 구체적인 것을 분리하여 연결한 것추상화(Abstraction)와 구현(Implementation)을 분리하여 각각을 독립적으로 변경할 수 있게 하는 구조 패턴즉 기능 계층과 구현 계층의 분리로 시스템의 확장성과 유지보수성을 높이는 패턴 2. 브릿지 사용 목적 구현과 추상화의 분리 - 클라이언트 코드가 구체적인 구현에 의존하지 않고 추상화된 인터페이스만 사용런타임 구현 교체 - 프로그램 실행 중에도 구현체를 동적으로 바꿀 수 있음클래스 계층 구조 단순화 - 상속 대신 컴포지션을 사용하여 복잡한 상속 구조를 피함플랫폼 독립성 - 다양한 플랫폼이나 환경에서 동일한 코드가 작동함 3. 예시3.1 예시리모컨과 TV리모컨(추상화)은 어떤 브랜드의 TV(구현)든 상관없이 동작해야..
어느덧 9주차가 됐다. 이번 주엔 너무나 많은 것을 했다 html, css 수업 시작과 더불어 프론트엔드의 필요성이 느껴져 공부를 시작했다.타입스크립트를 시작한 것... 이번주에 공부 계획을 세웠던 것은 다음과 같다. 이번주 목표디자인패턴 - 실패, 2개 남음모두 끝내기머신러닝 강의 - 성공4개 강의 수강자바가상쓰레드 끝내기 - 실패지네릭스 복습 끝내기 - 실패sql매일 모델링, 튜징 1장씩 복습하기 - 성공블로그 4개 쓰기 - 성공 [매일 아침]깃허브 커밋, 블로그글 쓰기 - 성공 반성 및 계획이번 주엔 예상치 못한 공부를 시작함과 더불어, 이사 기간이 겹쳤기 때문에 내가 계획했던 모든 내용들을 실천하지 못했다.다음주부턴 계획을 좀 더 현실적으로, 공부량을 고려해봐야겠다. 다음은 내가 이번주에 ..