✅ 1. "기본 패키지(default package)"란?아무 package선언이 없다면, Java는 그 클래스를 "기본 패키지"에 속한 것으로 간주즉, 그냥 src 폴더에 파일이 바로 들어있을 경우를 말함// 패키지 선언 없음public class MyClass { ...}✅ 2. 왜 기본 패키지를 쓰면 안 될까?Spring Boot는 애플리케이션을 실행할 때 다음과 같은 스캔 작업을 한다:@ComponentScan: 빈(bean)으로 등록할 클래스 찾기@EntityScan: JPA 엔티티 클래스 찾기@ConfigurationPropertiesScan: 프로퍼티 바인딩 대상 클래스 찾기이 스캔들은 지정된 패키지부터 하위 패키지를 모두 찾도록 동작하는데,**기본 패키지는 "패키지가 없다"**는 뜻이..
✅ 1. 빌드 시스템이란?👉 프로젝트를 자동으로 컴파일, 테스트, 패키징, 실행하도록 도와주는 도구대표적인 빌드 시스템MavenXML 기반, 구조가 엄격함. 널리 사용됨GradleGroovy/Kotlin 기반, 유연하고 속도 빠름✅ 2. 종속성 관리란?👉 우리가 만든 코드 외에도 다른 라이브러리(예: DB 연결, 웹서버 등)를 함께 써야 함👉 이런 외부 라이브러리들을 자동으로 받아서 연결해주는 시스템Spring Boot가 도와주는 점Spring Boot는 필요한 라이브러리를 묶어서 자동으로 관리해줌라이브러리마다 버전 하나하나 다 쓰지 않아도 됨!예: spring-boot-starter-web를 추가하면, 웹 서버 관련 라이브러리들이 자동 포함됨✅ 3. 스타터(starter)란?👉 라이브러리 묶음(..
우선 이걸 공부하게 된 이유는 내가 맡고 있는 서비스의 소스가 아래처럼 되어있어서 찾아보다가 공부하게 되었다.@Resource(name= "electContractDAO")private ElectContractDAO electContractDAO; 이렇게 사용하면 우선 문제점들은 아래와 같다.1. 테스트 불가능(private 필드라 Mock 주입이 어렵다)2. 불변성 보장 불가(final 키워드 사용 불가 - @Resource, @Autowired 등과 같이 필드를 주입하는 어노테이션과 같이 못씀)3. 의존성 숨김(생성자만 봐서는 의존성 파악이 어렵다)4. 생성자가 호출된 후에 스프링이 따로 필드에 의존성을 주입해서 electContractDAO에 null 이슈가 있을 수 있다.5. 테스트 불가능(Moc..
✅ 렌더링(Rendering)이란?렌더링이란 "코드(HTML, CSS, JS)를 브라우저가 해석해서 실제 사용자 눈에 보이는 '화면'으로 그려주는 과정"입니다. ✅ 1. SSR (Server Side Rendering: 서버사이드 렌더링)- HTML을 서버에서 렌더링해서 클라이언트(브라우저)에 전달(=완성본을 만들어 전달)- 완성된 HTML을 먼저 브라우저에 전송하고, 그 다음 JS 파일들을 다운로드에서 실행장점 초반 로딩 속도가 빠름(HTML이 미리 준비되어 있어 바로 표시 가능SEO(검색엔진최적화)에 유리단점사용자와 상호작용 시 페이지 새로고침 필요서버에 부하가 큼jsp, thymeleaf 등이 있다. ✅ 2. CSR (Client Side Rendering: 클라이언트사이드 렌더링)- HTML의 뼈..
✅ Maven vs Gradle 비교구분MavenGradle 설정 방식XML (pom.xml)Groovy/Kotlin DSL (build.gradle)가독성길고 명확하지만 다소 장황간결하고 유연빌드 속도느린 편빠름(Incremental Build 지원)표준화매우 표준화되어 있음유연하지만, 표준 강제력은 낮음의존성 관리중앙 저장소(Maven Central)동일(Maven Central/JCenter 사용 가능)학습 곡선쉽고 직관적약간 더 높음확장성플러그인 중심코드처럼 자유롭게 확장 가능 ✅ 결론단순하고 표준화된 프로젝트 → Maven이 더 적합유연하고 성능 좋은 최신 빌드 시스템 → Gradle이 더 적합
Q. UserController에서 userService 주입하는 이유? @atuowired를 안쓰는 이유? - 가장 큰 이유는 불변성 때문이다. 절대 바뀌지 않도록 보장하기 위해 생성자 주입을 사용.- userService가 절대 다른 객체로 바뀌지 않고 항상 같은 userService를 사용비교 항목@Autowired(필드 주입)생성자 주입불변성final 불가 → 런타임 변경 가능final 가능 → 불변 보장순환참조 감지런타임 시 늦게 발견빈 생성 시점에 바로 감지의존성 명확성클래스만 봐서는 어떤 의존성이 필요한지 숨겨짐생성자 파라미터로 명확하게 보임선택적 의존성가능 (@Autowired(required=false))선택적 주입엔 적합하지 않음코드 간결성가장 짧음생성자 필요(조금 더 코드 많음)Spr..
툴은 인텔리제이, 프레임워크는 스프링부트를 사용해서 기본 crud 게시판을 만들어 봤다. 우선 application.yml이란?-> Springboot는 보통 application.properties를 사용하지만 application.yml은 yaml 문법을 써서 더 계층적으로 보기 쉽게 관리할 수 있어서 현재 이 프로젝트에서는 application.yml을 사용했다. @RestController vs @Controller✅ @RestController역할 데이터(JSON, XML 등) 를 반환하는 컨트롤러주로 REST API 개발할 때 사용특징@Controller + @ResponseBody 를 합친 것메서드 리턴 값이 자동으로 JSON(또는 XML) 으로 변환됨뷰 이름을 반환하지 않음✅ @Contr..
** 김영한님의 인강을 듣고 정리했습니다. 👉스프링자바 언어 기반의 프레임워크자바 언어의 가장 큰 특징(객체지향언어)스프링은 객체 지향 언어가 가진 강력한 특징을 살려내는 프레임워크스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크👉객체지향추상화캡슐화다형성상속👉좋은 객체 지향 설계의 5가지 원칙(SOLID): 객체 지향 프로그래밍(OOP)에서 유지보수성과 확장성을 높이기 위한 5가지 설계 원칙SRP : 단일 책임 원칙(클래스는 하나의 책임만 가져야 한다)OCP : 개방-폐쇄 원칙(기존 코드 수정 없이 새로운 기능을 추가할 수 있어야 한다.)LSP : 리스코프 치환 원칙(자식 클래스는 부모 클래스를 대체할 수 있어야 한다.)ISP : 인터페이스 분리 원칙(클라이언트가 사용하지 ..