분류 전체보기

Front-End

동기와 비동기

이번 글은 실무에서 사용 중인 페이지에서 문제가 발생하여, 이번 기회에 for문과 동기,비동기에 대해 정리하고자 글을 작성했다. 문제점은 승인버튼을 누르면 다건처리가 가능한데, 1,2,3 건에 대한 승인 시도시, 2번에 대한 결제취소가 되면 1,3번 건이 승인완료처리가 되지않고 1,2번건이 승인완료 처리가 되는 문제점이 있었다. 성공한건만 승인완료가 되어야 한다! 소스를 보니 문제점은 비동기 처리와 for 루프의 비동기성 문제였다.for 루프 안에서 ajaxJson(비동기) 함수를 호출하고 있는데, 이 ajaxJson 호출은 기본적으로 비동기로 동작한다. 즉, for 루프는 ajaxJson 호출이 끝나기를 기다리지 않고 즉시 다음 반복으로 넘어간다. 이로 인해 루프가 모두 완료된 후에도 ajaxJson ..

Back-End/SpringBoot

Spring boot docs - 기본 패키지

✅ 1. "기본 패키지(default package)"란?아무 package선언이 없다면, Java는 그 클래스를 "기본 패키지"에 속한 것으로 간주즉, 그냥 src 폴더에 파일이 바로 들어있을 경우를 말함// 패키지 선언 없음public class MyClass { ...}✅ 2. 왜 기본 패키지를 쓰면 안 될까?Spring Boot는 애플리케이션을 실행할 때 다음과 같은 스캔 작업을 한다:@ComponentScan: 빈(bean)으로 등록할 클래스 찾기@EntityScan: JPA 엔티티 클래스 찾기@ConfigurationPropertiesScan: 프로퍼티 바인딩 대상 클래스 찾기이 스캔들은 지정된 패키지부터 하위 패키지를 모두 찾도록 동작하는데,**기본 패키지는 "패키지가 없다"**는 뜻이..

Back-End/SpringBoot

Spring boot docs - 빌드 시스템

✅ 1. 빌드 시스템이란?👉 프로젝트를 자동으로 컴파일, 테스트, 패키징, 실행하도록 도와주는 도구대표적인 빌드 시스템MavenXML 기반, 구조가 엄격함. 널리 사용됨GradleGroovy/Kotlin 기반, 유연하고 속도 빠름✅ 2. 종속성 관리란?👉 우리가 만든 코드 외에도 다른 라이브러리(예: DB 연결, 웹서버 등)를 함께 써야 함👉 이런 외부 라이브러리들을 자동으로 받아서 연결해주는 시스템Spring Boot가 도와주는 점Spring Boot는 필요한 라이브러리를 묶어서 자동으로 관리해줌라이브러리마다 버전 하나하나 다 쓰지 않아도 됨!예: spring-boot-starter-web를 추가하면, 웹 서버 관련 라이브러리들이 자동 포함됨✅ 3. 스타터(starter)란?👉 라이브러리 묶음(..

Back-End/SpringBoot

@Autowired 필드 주입 지양해야하는 이유

우선 이걸 공부하게 된 이유는 내가 맡고 있는 서비스의 소스가 아래처럼 되어있어서 찾아보다가 공부하게 되었다.@Resource(name= "electContractDAO")private ElectContractDAO electContractDAO; 이렇게 사용하면 우선 문제점들은 아래와 같다.1. 테스트 불가능(private 필드라 Mock 주입이 어렵다)2. 불변성 보장 불가(final 키워드 사용 불가 - @Resource, @Autowired 등과 같이 필드를 주입하는 어노테이션과 같이 못씀)3. 의존성 숨김(생성자만 봐서는 의존성 파악이 어렵다)4. 생성자가 호출된 후에 스프링이 따로 필드에 의존성을 주입해서 electContractDAO에 null 이슈가 있을 수 있다.5. 테스트 불가능(Moc..

Language/Java

static, final, static final

🎯 3가지 키워드 비교: 새로운 예시 — 컵라면 공장상황:너는 컵라면 공장을 운영하고 있어.매일 라면을 생산하는 기계가 있고, 거기서 나오는 라면(객체) 마다 제조번호가 다르지!✅ static: 공장에서 모두가 공유하는 것public class Ramen { static String factoryName = "라면공장";}이건 공장 이름모든 라면이 같은 공장에서 나왔으니까 공장 이름은 하나만 있으면 돼!그래서 static은 "모든 객체가 공유하는 값"이야.📌 사용 예System.out.println(Ramen.factoryName); // 라면공장 ✅ 객체 없이도 클래스 이름으로 바로 접근 가능!✅ final: 바뀌면 안 되는 개별 정보public class Ramen { final Str..

Language/Java

JVM 과 자바메모리

📦 JVM.java(자바소스코드) → .class(자바바이트코드) ===>자바소스코드가 자바바이트코드로 변환되는 과정을 자바컴파일러라고 한다.이걸 읽어서 실행하는 것이 JVM 즉, 자바 프로그램을 실행하는 가상 컴퓨터이다. 📦 자바 메모리╔═══════════════════════╗ ║ Method Area ║ ← 클래스, static 변수,static final 정보 ╠═══════════════════════╣ ║ Heap ║ ← 객체 저장 (new로 만든 것들), final╠═══════════════════════╣ ║ Stack ║ ← 지역 변수, 매개변수, 메서드 실행 정보╚═══════════════════════╝?..

Language/Java

생성자에 대해..

✅ 생성자란?- 기초값을 세팅한다와 같은 내용! ( 이렇게 하면 Student s = new Student("구름", 20); // → 처음 만들 때부터 name, age 값을 넣게 강제함 Student 객체가 만들어질 때, name과 age는 무조건 들어가게 돼. )- new는 단순히 메모리에 공간을 만드는 것이고, 생성자는 그 공간에 의미있는 값을 넣어주는 역할을 한다.* 실제로 개발하다보면 객체를 만들고 값 설정하는걸 깜빡하는 경우가 정말 많다. 왜 이 값이 null이지? 하면서 디버깅한는 시간이 엄청나서 생성자를 쓰면 이런 실수를 컴파일 시점에 잡아준다. - 필수로 입력을 해야하는 상태로 변하기 때문에 해당 객체를 쓸때는 무조건 불변하게 입력을 요구 할 수 있게 만들수 있다.- 즉 실수를 방지하..

Back-End/SpringBoot

SSR과 CSR

✅ 렌더링(Rendering)이란?렌더링이란 "코드(HTML, CSS, JS)를 브라우저가 해석해서 실제 사용자 눈에 보이는 '화면'으로 그려주는 과정"입니다. ✅ 1. SSR (Server Side Rendering: 서버사이드 렌더링)- HTML을 서버에서 렌더링해서 클라이언트(브라우저)에 전달(=완성본을 만들어 전달)- 완성된 HTML을 먼저 브라우저에 전송하고, 그 다음 JS 파일들을 다운로드에서 실행장점 초반 로딩 속도가 빠름(HTML이 미리 준비되어 있어 바로 표시 가능SEO(검색엔진최적화)에 유리단점사용자와 상호작용 시 페이지 새로고침 필요서버에 부하가 큼jsp, thymeleaf 등이 있다. ✅ 2. CSR (Client Side Rendering: 클라이언트사이드 렌더링)- HTML의 뼈..

개발하는 구름이
'분류 전체보기' 카테고리의 글 목록