본문 바로가기

전체 글

(76)
[Java] 이것이 자바다 - 추상 클래스 추상클래스란? 객체를 직접 생성할 수 있는 클래스를 실체 클래스라고 한다면 이 클래스들의 공통적인 특성을 추출해서 선언한 클래스를 추상 클래스라고 한다. 즉 추상클래스는 실체 클래스와 상속의 관계를 가지고 있으며 추상클래스가 부모이고 실체 클래스가 자식으로 구현되어 실체클래스가 추상클래스의 특성을 물려받아 추가적인 특성을 가질수 있게 된다. 그리고 추상 클래스는 단일 상속만 가능하다. 추상클래스를 사용하는 이유는 두가지가 있다. 1. 실체 클래스들의 공통된 필드와 메소드의 이름을 통일할 목적 실체 클래스를 설계하는 사람이 여러 사람일 경우 같은 기능을 가진 메소드를 구현하면서도 메소드 이름을 다르게 설정하여 객체마다 사용 방법이 달리질 수 있다. 이를 방지 하기 위하여 추상클래스에 메소드를 구현하고 추상..
[Java] 이것이 자바다 - 객체 지향 프로그래밍 객체 지향 프로그래밍이란? 현실 세계에서 어떤 제품을 만들 때 부품을 먼저 개발하고 이 부품들을 하나씩 조립해서 완성된 제품을 만들 듯이 소프트웨어를 개발할 때도 부품에 해당하는 객체를 만들고 이 객체를 하나씩 조립해서 완성된 프로그램을 만드는 기법을 객체 지향 프로그래밍(OOP: Object Oriented Programming)이라고 한다. 즉 객체 지향 프로그래밍은 프로그래밍에서 필요한 데이터를 추상화시켜 속성과 행위를 가진 객체를 만들고 그 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 객체 지향 프로그래밍의 장점 1. 유지보수성이 좋다. - 연관된 클래스만 코드를 변경하면 된다. 절차지향에 비해, 유지보수하기 편리하다. 2. 재사용성이 좋음 - 만들어 둔 객체를 다른..
[Java] 이것이 자바다 - JVM JVM 이란? 운영체제는 자바 프로그램을 바로 실행할 수 없는데 그 이유는 자바 프로그램은 완전한 기계어가 아닌 중간단계의 바이트 코드이기 때문에 이것을 해석하고 실행할 수 있는 가상의 운영체제가 필요하다. 이때 사용되는 것이 자바 가상 기계 JVM(Java Virtual Machine)이다. 바이트 코드는 모든 JVM에 동일한 실행 결과를 보장하지만 JVM은 운영체제에 종속적이다. 그래서 JVM은 운영체제에 맞게 설치 되어야 하는데 JDK(Java Development Kit)나 JRE(Java Runtime Envirenment)를 설치할때 자동으로 설치되며 JDK와 JRE가 운영체제에 맞게 제공된다. JVM이 시작되면 JVM은 운영체제에서 할당받은 메모리 영역(Runtime Data Area)을 다..
[JPA] LazyInitializationException 개인 프로젝트로 e-commerce 서비스를 개발하던 중 LazyInitializationException 에러가 발생하였다. LazyInitializationException 발생 이유 서비스단에서 @Transactional을 선언한 method가 종료되면 트랜잭션을 커밋한 후 트랜잭션과 영속성 컨텍스트가 종료된다. 영속성 컨텍스트가 종료되었으므로 조회한 엔티티가 준영속 상태가 되었고 그렇기 때문에 더이상 영속성 컨텍스트의 특징 중 하나인 지연로딩을 사용할 수 없다. 이때 컨트롤러단에서 FetchType.LAZY로 매핑된 테이블을 조회해오면 LazyInitializationException이 발생한다. LazyInitializationException 해결 과정 영속성 컨텍스트가 닫히기 전 서비스단에서..
[Java] CSV 파일 데이터 불러오기 과제 수행 중 데이터를 입력하는 과정에서 다음과 같이 하드코딩으로 데이터를 입력했다. @Component @Order(1) public class TestDataRunner implements ApplicationRunner { @Autowired ProductRepository productRepository; @Override public void run(ApplicationArguments args) throws Exception { Product product1 = createProduct((long) 768848, "[STANLEY] GO CERAMIVAC 진공 텀블러/보틀 3종", 21000, 45); Product product2 = createProduct((long) 748943, "디오..
[HTTP] 웹 통신 흐름 웹 브라우저에 11st.co.kr 를 입력 했을 때 어떤 일이 일어날까? IP 주소란? IP 주소란 쉽게 말해서 서버에 접근하기 위해 필요한 주소로 0.0.0.0부터 255.255.255.255로 이루어진 최대 12자리 숫자인데 서버에 접근 하기 위해 이 주소를 외우고 다니는 것은 쉬운 일이 아니다. 그래서 필요한것이 DNS이다. DNS 란? DNS란 Domain Name System을 지칭 하는 약어로 외우기 힘든 IP 주소를 비교적 외우기 쉬운 도메인 네임으로 변환해 주거나 반대의 변환을 수행해 주는 시스템이다. 웹 브라우저에 11st.co.kr를 입력 했을 때 일어나는 일 웹 브라우저에서 도메인 네임(11st.co.kr)을 입력한다. (1) DNS 서버에서 브라우저가 입력한 URL에 포함된 도메인 ..
[HTTP] 세션과 토큰 실전 프로젝트에서 Jwt 토큰을 이용한 소셜 로그인 기능을 맡아서 구현하게 되었는데 예전부터 꼭 한번 다뤄보고 싶은 부분이었어서 아직 많이 부족하지만 이번에 한번 글을 써보려고 합니다. 로그인 기능을 어떻게 구현을 했는지 설명하기 전에 먼저 세션과 토큰의 차이점을 알아보고 왜 토큰을 사용하여 로그인 기능을 구현했는지 알아 보겠습니다. 세션과 토큰 먼저 http는 상태를 저장하지 않습니다. 이를 Stateless하다고 표현하는데 이러한 http의 특성은 서버의 수평적인 확장을 가능하게 하여 서버를 증설할 때 유리하게 작용합니다. 하지만 그렇다고 모든 기능을 Stateless하게 설계할 수는 없는데 예를 들어 로그인한 유저의 정보를 가져오기 위해서 상태유지가 꼭 필요한 로그인 기능이 대표적입니다. 그래서 일..
[ALGORITHM] 트리 트리 자료구조 트리는 그래프의 일종으로 최소 연결 트리라고도 불린다. 트리의 구조 및 용어 노드 (Node) 트리를 구성하고 있는 기본 요소 노드에는 키 또는 값과 하위 노드에 대한 포인터를 가지고 있음. A, B, C, D, E, F, G, H, I, J 간선 (Edge) 노드와 노드 간의 연결선 루트 노드 (Root Node) 트리 구조에서 부모가 없는 최상위 노드 root node : A 부모 노드 (Parent Node) 자식 노드를 가진 노드 H, I에 부모 노드는 D 자식 노드 (Child node) 부모 노드의 하위 노드 노드 D의 자식 노드는 H, I 형제 노드 (Sibling node) 같은 부모를 가지는 노드 H, I는 같은 부모를 가지는 형제 노드 외부 노드(external node,..