전체 글

전체 글

    네트워크 컴퓨터 네트워크의 구성 요소와 네트워크의 종류

    네트워크 컴퓨터 네트워크의 구성 요소와 네트워크의 종류

    컴퓨터 네트워크 컴퓨터 네트워크는 컴퓨터와 다른 기기들이 서로 연결되어 데이터를 주고 받을 수 있도록 만들어진 시스템입니다. 이를 통해 우리는 웹 서칭, 이메일, 파일 공유, 온라인 게임, 소셜 미디어 등 다양한 온라인 활동을 할 수 있습니다. 네트워크 구성 요소 컴퓨터 네트워크에서는 중요한 세 가지 구성요소가 있는데, 하나는 `컴퓨터`이고, 다른 하나는 `전송(연결) 매체`, 마지막으로 `네트워크 장비`입니다. 1. 컴퓨터: 컴퓨터는 데이터를 생성하여 보내거나, 받는 도구입니다. 정확히 말하면 컴퓨터의 설치된 애플리케이션(Application)이 데이터를 생성하고 받는 역할을 합니다. 2. 전송 매체: 데이터를 한 컴퓨터에서 다른 컴퓨터, 컴퓨터와 네트워크 장비로 이동시키는데 사용되는 물리적인 통로입니..

    SpringBoot에서 JUnit5로 효율적인 단위 테스트 작성하기, Assertions로 값 검증하기

    SpringBoot에서 JUnit5로 효율적인 단위 테스트 작성하기, Assertions로 값 검증하기

    JUnit5 소개 JUnit은 자바 개발에서 단위 테스트를 작성하기 위한 표준 프레임워크입니다. JUnit을 사용하여 각각의 코드 조각을 테스트(단위 테스트)하고 그 결과를 검증할 수 있습니다. JUnit은 테스트 메서드를 정의하고 테스트 실행을 관리하는 데 도움을 줍니다. JUnit5는 다음 세 가지 구성 요소로 구성된 자바 단위 테스트 프레임워크입니다. JUnit Platform: JUnit 5의 기반을 형성하는 모듈입니다. 테스트 실행 엔진(Test Execution Engine)을 포함하며, 다양한 테스트 프레임워크를 지원하고 확장성을 제공합니다. 다양한 환경에서 테스트 실행을 지원하며, 새로운 테스트 엔진을 개발할 수 있습니다. JUnit Jupiter: JUnit 5의 새로운 테스트 API입니..

    SpringBoot에서 MockMvc을 활용한 컨트롤러, HTTP 요청 테스트 방법

    SpringBoot에서 MockMvc을 활용한 컨트롤러, HTTP 요청 테스트 방법

    MockMvc 소개 MockMvc: MockMvc는 Spring Framework의 일부로, 웹 어플리케이션의 컨트롤러를 테스트하는 데 사용됩니다. 이를 통해 HTTP 요청을 시뮬레이션하고 컨트롤러의 동작을 테스트할 수 있습니다. Spring 환경을 통합한 테스트 Spring 컨텍스트와 통합한 테스트 (Spring Bean을 주입하여 테스트 가능) HTTP 요청 및 응답 시뮬레이션 Spring Boot 프로젝트 설정 MockMvc와 JUnit을 사용하기 위해선 아래와 같은 의존성을 추가해야 합니다. testImplementation 'org.springframework.boot:spring-boot-starter-test' MockMvc를 사용한 컨트롤러 테스트 MockMvc를 구성하여 API 엔드포인트..

    MyBatis ON DUPLICATE KEY UPDATE: insert Key 중복 시 update 처리

    MyBatis ON DUPLICATE KEY UPDATE: insert Key 중복 시 update 처리

    ON DUPLICATE KEY UPDATE: upsert 구현 `ON DUPLICATE KEY UPDATE`는 `MySQL` 및 `MariaDB`에서 사용되는 SQL 문장 중 하나로, 주로 데이터를 삽입하려고 할 때 기존 레코드와 중복된 경우(중복 레코드) 기존 레코드를 업데이트하거나 무시하는데 사용됩니다. 중복 레코드: 데이터베이스에 이미 동일한 고유 키(primary key 또는 unique key)가 존재하는 경우, `ON DUPLICATE KEY UPDATE`를 사용하여 중복 레코드를 업데이트하거나 새로운 값을 가질 수 있습니다. 구문: INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...) ON DUPLICATE K..

    CORS(Cross-Origin Resource Sharing) 이해와 해결 방법

    CORS(Cross-Origin Resource Sharing) 이해와 해결 방법

    CORS CORS (Cross-Origin Resource Sharing)는 'Cross-Origin Resource Sharing'의 약어로, 웹 보안 메커니즘 중 하나입니다. 이 메커니즘은 웹 브라우저에서 실행되는 웹 페이지가 다른 웹사이트(출처)에서 데이터를 요청할 때 발생할 수 있는 보안 정책 중 하나입니다. 서로 다른 출처(origin) 간에 데이터 공유하려하면 이를 제한하는 보안 메커니즘(SOP, Same-Origin Policy)에 의해 CORS 오류가 발생하게 됩니다. 이러한 CORS 에러를 해결하기 위해선 CORS를 설정하여, 출처가 다른 서버 간의 리소스 공유를 허용해주어야합니다. 출처(Origin): Protocol + Hostname(Domain) + Port · 도메인(Hostna..

    웹 데이터 저장: 로컬 스토리지, 세션 스토리지, 쿠키

    웹 데이터 저장: 로컬 스토리지, 세션 스토리지, 쿠키

    웹 어플리케이션은 사용자 데이터를 저장하고 관리하는데 다양한 방법을 제공합니다. 그중 클라이언트 측에서 데이터를 저장하고 관리하기 위한 방법으로 `로컬 스토리지(Local Storage)`, `세션 스토리지(Session Storage)` 그리고 `쿠키(Cookies)`가 있습니다. 로컬 스토리지 (Local Storage) 로컬 스토리지는 브라우저에서 데이터를 영구적으로 저장하는데 사용됩니다. 이 데이터는 브라우저를 종료해도 유지되며, 사용자의 로컬 환경에서 접근이 가능합니다. 주로 사용자 설정과 같은 데이터를 저장하는데 유용합니다. 데이터는 문자열로 저장됩니다. 브라우저마다 별도로 유지되며, 도메인간에 공유되지 않습니다. 저장 용량은 일반적으로 5~10MB이고, 브라우저마다 다를 수 있습니다. 세션 ..

    Jar와 War의 차이(spring initializr packaging)

    Jar와 War의 차이(spring initializr packaging)

    JAR와 WAR은 자바 프로그램 및 관련 자원을 패키지하고 배포하기 위한 파일 형식입니다. 프로젝트 생성시 `Packaging` 옵션에서 JAR 혹은 WAR를 선택하여 해당 형식으로 어플리케이션 패키징하여 배포할 수 있습니다. JAR (Java Archive) 확장자: .jar JAR 파일은 자바 클래스 파일, 리소스 파일 (이미지, 설정 파일 등) 및 라이브러리(JAR 파일 자체 또는 외부 라이브러리)를 하나의 아카이브 파일로 패키징합니다. 일반적으로 JAR 파일은 자바 클래스 파일과 그 클래스들이 사용하는 이미지, 설정 파일, 텍스트 파일, 라이브러리 등을 포함합니다. 이것은 다른 프로그램에서 재사용되거나 실행될 수 있도록 도와줍니다. 예를 들어, 다른 사람이 만든 유용한 코드 조각을 JAR 파일로 ..

    Servlet에 대해 알아보자!! 동작 원리 파악하기

    Servlet에 대해 알아보자!! 동작 원리 파악하기

    Servlet 서블릿은 자바를 기반으로 한 웹 어플리케이션 개발 기술로, 클라이언트의 요청과 응답을 처리하고 동적인 콘텐츠를 생성하는 역할을 담당합니다. Servlet의 역할 앞서 포스팅한 웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기 에서 서블릿과 서블릿 컨테이너에 관해 간단하게 설명을 했었습니다. 앞에 내용을 안다는 전제하에 설명을 하도록 하겠습니다. 원래는 클라이언트가 데이터를 전송하기 위해서는 소켓 연결, HTTP 요청 메시지 파싱, Content-Type 확인, HTTP 응답 메시지 생성 등 많은 것들을 직접해주어야 했지만 서블릿을 지원하는 WAS(엄밀히 말하면 WAS안에 포함되어 있는 서블릿 컨테이너)를 사용하면서 비즈니스 로직을 제외한 모든 처리를 서블릿이 해..

    웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기

    웹 서버 vs 웹 어플리케이션 서버 vs CGI 프로그램: 차이 쉽게 이해하기

    웹 (Web): HTTP 기반 웹은 HTTP(하이퍼텍스트 전송 프로토콜) 기반으로 작동합니다. HTTP 메시지는 웹 상에서 클라이언트와 서버 간에 데이터를 교환하는데 사용되는 형식화된 텍스트입니다. HTML, 문서파일, 이미지, 오디오, 영상, XML, JSON 등 다양한 데이터유형을 클라이언트와 서버 사이에서 안전하게 전송할 수 있습니다. 웹 서버 (Web Server) 웹 서버는 클라이언트(웹 브라우저)로부터 HTTP 요청을 받아들이고, 정적인 웹 리소스를 제공하는 역할을 합니다. 정적 리소스: HTML 파일, 이미지, CSS 파일 등 웹 서버 예: Apache, Nginx 등 웹 어플리케이션 서버 (Web Application Server): 웹 어플리케이션 서버는 웹 서버의 확장된 개념으로, 동적..

    JPA Entity의 기본 생성자가 필수인 이유

    JPA Entity의 기본 생성자가 필수인 이유

    Entity는 반드시 `기본 생성자`를 가져야한다. 기본 생성자의 접근 제어자는 `public`, `protected`이어야한다. JPA를 학습할 때 위와 같은 원칙을 본적이 있을 겁니다. 무심코 넘어갔던 개념을 되짚어보기 위해 JPA Entity의 기본 생성자에 대해 포스팅 해보겠습니다. 기본 생성자가 있어야하는 이유? 리플렉션(Reflection)을 통한 객체 생성: JPA는 데이터베이스로부터 엔티티 객체를 생성하여 값을 주입할 때 `Reflection API`를 이용합니다. Reflection API를 통해 객체를 생성하려면 `기본 생성자`가 반드시 필요합니다. JPA는 Entity의 기본 생성자로 객체를 생성한후 Reflection API를 사용하여 값을 매핑합니다. 따라서 Entity에는 기본 ..

    JPA Spring Data JPA: 스프링 프레임워크에서 JPA 편리하게 사용하기

    JPA Spring Data JPA: 스프링 프레임워크에서 JPA 편리하게 사용하기

    Spring Data JPA Spring Data JPA는 Spring 프레임워크의 일부로, JPA(Java Persistence API)를 편리하게 이용할 수 있습니다. 이를 통해 개발자들은 데이터 엑세스 코드를 작성하는데 적은 시간을 투자하고, 비즈니스 로직에 더욱 집중할 수 있습니다. Repository 인터페이스: 편리함 증대 Spring Data JPA는 데이터베이스와의 상호작용을 더욱 간단하게 만들기 위해 Repository 인터페이스를 활용합니다. 기존의 JPA에서는 개발자가 EntityManager를 사용하여 데이터베이스 작업을 수행하였습니다. 그러나 Spring Data JPA는 이보다 더 추상화된 접근 방식을 제공합니다. 개발자는 단순히 Repository 인터페이스를 정의하고, 필요한..

    JPA JPQL(객체 지향 쿼리 언어)를 완벽히 이해해보자

    JPA JPQL(객체 지향 쿼리 언어)를 완벽히 이해해보자

    JPQL: Java Persistence Query Language `em.find()` 메서드는 엔티티의 기본키를 이용하여 데이터를 가져오는 방법입니다. 하지만 `em.find()` 메서드만으로는 더 복잡한 검색 조건이나 특정 필드 기반의 조회 등의 다양한 쿼리를 작성하기는 어렵습니다. 이러한 처리를 위해 SQL과 같은 유연한 처리를 위해 JPQL를 제공합니다. JPQL은 다음과 같은 특징을 갖고 있습니다. 객체 지향적 쿼리 작성: SQL: 데이터베이스 테이블을 대상으로 하는 데이터 중심의 쿼리 JPQL: Entity 객체를 대상으로 하는 객체지향 쿼리 데이터 베이스의 독립성: JPQL은 SQL 문법을 추상화하였기 때문에 데이터베이스 독립성을 제공합니다. 복잡한 쿼리 작성 용이: 기존 JPA와는 다르게..

    JPA '값 타입'의 선언과 활용, @AttributeOverride와 @ElementCollection, @CollectionTable 역할

    JPA '값 타입'의 선언과 활용, @AttributeOverride와 @ElementCollection, @CollectionTable 역할

    값 타입 엔티티에서 데이터 타입은 엔티티 타입과 값 타입으로 나눌 수 있습니다. 값 타입은 단순히 값을 의미하고, 고유한 식별자를 가지지 않습니다. 엔티티와 달리 고유한 식별자가 없고, 다른 엔티티와의 관계를 형성하지 않습니다. 값 타입의 데이터들이 고유한 식별자를 갖고 있지 않다고 해서 DB 테이블에 매핑되지 않는 것은 아닙니다. 똑같이 매핑되고 생명 주기도 해당 엔티티에 의존합니다. @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private int age; // ... } 고유한 식별자를 갖고 있는 `id`는 엔티티 타입입니다..

    JPA 영속성 전이(CASCADE)와 고아 객체 제거: 데이터 일관성과 관리 효율 높이는 전략(방법)

    JPA 영속성 전이(CASCADE)와 고아 객체 제거: 데이터 일관성과 관리 효율 높이는 전략(방법)

    영속성 전이: CASCADE JPA 영속성 전이(CASCADE)는 부모 엔티티의 작업이 자식 엔티티로 전파되도록 설정하는 기능입니다. 부모 엔티티의 변경이나 삭제 작업이 연관된 자식 엔티티에 자동으로 전파됨으로써 데이터의 일관성을 유지합니다. 또 중복된 코드 없이 객체 간의 연관 작업을 간편하게 처리함으로 개발 생산성을 높일 수 있습니다. 사용법은 다음과 같이 cascade 옵션을 지정해 주면 됩니다. `CascadeType.ALL`으로 설정하여 모든 작업을 자식 엔티티로 전파하는 예제 코드입니다. @Entity public class Parent { @OneToMany(mappedBy = "parent", cascade = CascadeType.ALL) private List children; // ...

    JPA 프록시와 지연로딩: 성능 최적화를 위한 기술(방법)

    JPA 프록시와 지연로딩: 성능 최적화를 위한 기술(방법)

    연관관계인 `Employee`와 `Company` 엔티티가 있을 때, Employee가 Company를 참조하고 있기 때문에 Employee 정보를 조회하려고 하면 Company 정보도 조회하게 될 것입니다. Employee에 대한 정보만 필요하고 연관된 엔티티인 Company에 대한 정보가 필요하지 않은 경우, 이는 불필요한 작업(성능 낭비) 일 것입니다. JPA에서는 이러한 경우를 해결하기 위해 `지연 로딩`이라는 방식을 사용합니다. 지연 로딩: Lazy Loading `지연 로딩`을 구현하기 위해 `프록시`를 활용합니다. Proxy 프록시(Proxy)란 객체 지향 프로그래밍에서 실제 객체에 대한 대리 객체를 생성하여 대신 사용하는 패턴을 말합니다. JPA에서는 프록시 객체를 생성하여, 프록시 객체를..

    JPA 상속 관계 매핑 방법과 공통 매핑하는 방법

    JPA 상속 관계 매핑 방법과 공통 매핑하는 방법

    JPA는 객체 지향 프로그래밍에서 중요한 개념인 상속 관계를 데이터베이스 테이블과 연결하는 방법을 제공해줍니다. 이를 통해 객체 간의 상속 관계를 데이터베이스에서도 표현할 수 있습니다. 이런 매핑으로 객체 지향적인 코드와 데이터베이스의 구조를 조화시켜 객체 지향적인 프로그래밍을 할 수 있습니다. 상속 관계 매핑 방법 JPA에는 3 가지 상속 관계 매핑 방법이 있습니다. 1. 단일 테이블 전략 모든 클래스를 하나의 테이블에 통합하여 저장하는 방식입니다. 부모 클래스와 자식 클래스의 속성을 같은 테이블에 저장하기 때문에, 자식 클래스의 속성을 Nullable하게 해야합니다. 또한 자식 테이블들을 구분하기 위해 컬럼을 추가하여 구분컬럼으로 사용합니다. 이 방식은 테이블이 한 개이기 때문에 조인을 사용하지 않아..

    JPA 연관관계 매핑: 객체 간의 관계를 표현하고 데이터베이스에 저장

    JPA 연관관계 매핑: 객체 간의 관계를 표현하고 데이터베이스에 저장

    정리 요약 관계 다대일(N : 1) @ManyToOne 일대다( 1 : N) @OneToMany 일대일( 1 : 1) @OneToOne 다대다(N : N) @ManyToMany 방향성 테이블 외래 키로 양쪽 조인이 가능 방향이라는 개념이 없음 객체 참조용 필드가 있는 쪽으로만 참조 가능 단방향: 한 쪽만 참조 양방향: 양쪽이 단방향으 서로 참조 연관관계의 주인 테이블은 외래 키 하나로 두 테이블의 연관관계를 찾음 객체 양방향 관계는 양쪽이 모두 참조를 하므로 참조가 2군데 이다 연관관계의 주인: 외래 키를 관리하는 참조 데이터베이스와 객체의 패러다임 차이 JPA는 객체와 관계형 데이터베이스 간의 매핑을 지원해 주는 기술로, 객체 지향적인 프로그래밍으로 데이터베이스를 조작할 수 있게 해 줍니다. 객체와 관..

    JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing

    JPA 생성 및 수정 날짜 자동 처리를 위한 공통 엔티티 만들기 @MappedSuperclass, @EnableJpaAuditing

    서비스를 만들때 많은 엔티티가 생성일과 수정일을 가지고 있습니다. 이러한 필드를 각각의 엔티티마다 중복으로 작성하는 것은 번거로울 뿐 아니라 유지보수도 복잡해지고 가독성도 떨어집니다. 때문에 우리는 공통으로 갖고 있는 정보(생성일과 수정일)를 따로 엔티티로 만들어 상속받게 만들어보겠습니다. @MappedSuperclass JPA에서 상속 관계 매핑을 위해 사용되는 어노테이션입니다. 이 어노테이션을 사용하면 공통된 매핑 정보를 가진 부모 클래스를 정의할 수 있고, 여러 엔티티에서 공통 필드와 매핑 정보를 상속받아 사용할 수 있습니다. `@MappedSuperclass` 어노테이션이 붙은 부모 클래스를 자식 엔티티가 상속받게 되면, 부모 클래스는 테이블로 생성되지 않고, 상속한 자식 클래스로 테이블이 생성됩..

    JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략

    JPA ddl-auto: 데이터베이스 스키마 자동 생성 전략

    1. `create`: 새로 생성 어플리케이션을 실행할 때마다 기존 데이터는 삭제하고, 데이터베이스 스키마를 새로 생성하는 전략입니다. spring.jpa.hibernate.ddl-auto=create 2. `create-drop`: 종료할 때 삭제 데이터베이스 스키마가 새로 생성된다는 점에서는 create 전략과 같지만, create-drop은 어플리케이션이 종료될 때 데이터베이스 스키마도 삭제됩니다. spring.jpa.hibernate.ddl-auto=create-drop 3. `update`: 변경된 내용만 반영 데이터베이스 스키마에 영향을주지 않고, 엔티티 클래스의 변경사항만을 반영합니다. 즉, 데이터베이스 스키마는이미 존재하는 상태에서엔티티 클래스의 변경을반영합니다. spring.jpa.hib..

    JPA 엔티티 매핑: 객체와 데이터베이스 테이블의 매핑

    JPA 엔티티 매핑: 객체와 데이터베이스 테이블의 매핑

    엔티티(Entity) 매핑 JPA 엔티티 매핑은 다음과 같은 주요 어노테이션과 개념을 활용하여 이루어집니다. 객체와 테이블 매핑: @Entity, @Table 기본 키 매핑: @Id, @GeneratedValue 필드와 컬럼 매핑: @Column 연관 관계 매핑: @JoinColumn, @ManyToOne, @ManyToMany 등 상속 관계 매핑: @Inheritance, @DiscriminatorColumn, @DiscriminatorValue @Entity 엔티티 클래스임을 지정하여 JPA에게 알려줍니다. 기본 생성자가 필요합니다. 저장할 필드에 `final`을 사용하면 안 됩니다. final 클래스, enum, interface, inner 클래스에는 사용할 수 없습니다. @Table 엔티티와 매..

    JPA EntityManager와 영속성: JPA의 데이터 관리 이해

    JPA EntityManager와 영속성: JPA의 데이터 관리 이해

    엔티티(Entity 객체) 엔티티는 데이터베이스의테이블과 매핑되는 클래스입니다. @Entity public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String email; // Getter, Setter, Constructor, Methods... } User 클래스에 `@Entity` 어노테이션을 사용하여 엔티티로 지정해줍니다. 그럼 해당 엔티티는 데이터베이스의 User 테이블과 매핑되며, 객체의 속성과 테이블의 컬럼 간의 매핑이 이루어집니다. JPA 엔티티 매핑 속성 자세히 보기 엔티티 매니저(JPA EntityManager) J..

    JPA: 자바 ORM 표준

    JPA: 자바 ORM 표준

    JPA: 자바 표준의 ORM JPA는 자바 표준의 ORM으로 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간극을 줄이기 위한 기술입니다. 프로그래밍 언어(Java)는 객체지향 언어이고, SQL은 객체지향이 아니기 때문에 객체를 RDB에 저장할 때 개념적으로 불일치가 발생합니다. ORM(Object-Relation Mapping)을 통해 개발자가 클래스를 작성하면 테이블 간의 매핑을 통해 객체를 데이터베이스에 저장하고 조회할 수 있고, 객체 지향적인 방식으로 데이터베이스를 조작할 수가 있습니다. 이를 통해 객체와 데이터베이스 간의 변환 작업도 최소화되며 개발자는 비즈니스 로직에 집중할 수 있게 됩니다. JPA(Java Persistence API)는 ORM의 핵심 원칙을 구현한 Java 표준입니다. 자..

    Spring SpEL: Spring Expression Language 스프링 표현 언어

    Spring SpEL: Spring Expression Language 스프링 표현 언어

    SpEL: Spring Expression Language Expression Lanuage(표현 언어)는 값 또는 식을 조작하거나, 데이터나 설정 값을 가져올 수 있게 하는데 사용되는 표현식에 가까운 언어입니다. SqEL은 Spring Framework에서 사용되는 EL의 한 종류로, 스프링 모든 영역에서 사용 가능한 언어 형식입니다. 주로 설정 파일에서 값 설정, 빈 생성 조건, 프로퍼티 접근 등을 위해 활용됩니다. 프로퍼티 접근: 빈의 프로퍼티 값을 가져오거나 설정 가능 메서드 호출: 빈의 메서드를 호출하고 결과 가져오기 수학 및 논리 연산: 산술, 비교, 논리 연산 가능 조건문 및 반복문: 조건문과 반복문을 지원 컬렉션 처리: 리스트, 맵 등의 컬렉션을 처리할 수 있음 코드 내에서 SqEL 사용 ..

    Spring WebClient를 활용하여 HTTP 요청 처리하기

    Spring WebClient를 활용하여 HTTP 요청 처리하기

    WebClient란? WebClient가 도입되기 전에는 주로 RestTemplate을 사용하여 HTTP 요청을 보냈었습니다. RestTemplate은 Spring의 기본적인 HTTP 클라이언트 라이브러리로, 동기적으로 동작합니다. 즉, RestTemplate을 사용하면, 요청과 응답을 처리하기 위해 Blocking I/O 방식을 사용하여 스레드를 블로킹하고 기다립니다. 이는 스레드 자원의 낭비를 초래할 수 있고, 이로 인해 서버의 응답성이 저하될 수 있습니다. `WebClient`는 RestTemplate의 단점을 개선하기 위해 비동기적인 방식으로 동작하여, 동시에 여러 요청을 처리할 수 있습니다. 또한 리액티브 프로그래밍과 함께 사용하기에 적합합니다. 비동기 처리 (동기적인 처리도 가능) 리액티브 프..

    Vue.js this.$set 반응성 유지를 위한 방법

    Vue.js this.$set 반응성 유지를 위한 방법

    this.$set: 반응성 유지 위한 방법 Vue.js는 반응성 시스템을 통해 데이터의 변경을 감지하고 자동으로 화면을 업데이트 해줍니다. 객체의 속성을 변경하는 경우 Vue의 반응성이 정상 작동하지만, 특정 상황에서는 반응성이 제대로 작동하지 않을 수 있습니다. 이런 경우, `this.$set`을 사용하여 Vue에 변경 사항을 명시적으로 알려주어 반응성을 유지할 수 있습니다. 💁‍♂️ 객체의 속성을 변경은 아래 코드 처럼 간단히 값을 할당하면 됩니다. {{ message }} Change Message ​ this.$set을 사용하는 경우 1. 배열에 인덱스로 값을 추가할 때 Vue는 배열의 길이를 관찰할 수 있지만, 배열에 값을 추가할 때 일반적인 `인덱스로 할당`하면 반응성이 제대로 작동하지 않을 ..

    Vue.js Vuex store: Vue.js 어플리케이션의 상태 관리를 해결하는 방법

    Vue.js Vuex store: Vue.js 어플리케이션의 상태 관리를 해결하는 방법

    Vuex Vue.js 어플리케이션을 개발하면서 여러 상태 값을 사용하거나, 여러 컴포넌트 간의 공유 상태 공유를 하게 되면 상태 관리가 어려워지고, 상태 변경 추적도 어려워집니다. 이때 Vuex 라이브러리를 사용하면 복잡한 상태를 중앙 집중식으로 관리하여 효율적으로 상태 관리할 수 있게 도와줍니다. Vue.js에서 컴포넌트는 [부모-자식] 관계를 갖기 때문에 props를 통해 데이터를 주고받지만, Vuex를 통해 따로 빼놓음으로 데이터를 중앙 집중식으로 관리하기 때문에 [부모-자식] 관계에 얽매이지 않을 수 있습니다. 물론 Event Bus를 사용하면 이 역시 [부모-자식] 관계에 얽매이지 않을 수 있지만 어플리케이션의 볼륨이 커질수록 관리가 어려워지기 때문에 규모가 큰 경우 Vuex를 사용합니다. 💁‍..

    SVN 이클립스에서 SVN 사용법

    SVN 이클립스에서 SVN 사용법

    학부 시절에 프로젝트를 진행할 때 형상 관리 툴로 Git을 사용해왔는데, 회사에서는 Git 대신 SVN을 사용하여 이에 대해 간략하게 포스팅 하도록 하겠습니다. SVN은 Git과 마찬가지로 소스코드 버전 관리 시스템(VCS) 중 하나로, 여러 사용자가 동시에 소스 코드를 공유하고 변경내역을 추적할 수 있도록 도와주는 툴입니다. 이클립스는 SVN과의 통합을 지원하기 때문에 손쉽게 사용할 수 있습니다. 이클립스에서 SVN 설치하는 방법 1. 이클립스에 SVN 플러그인 설치 이클립스에서 대표적인 SVN 플러그인으 Subclipse와 Subversive가 있습니다. 이 중 사용할 클라이언트를 선택하여 설치하면 됩니다. 이때 에서 검색하면 됩니다. (저는 Subclipse를 설치하였습니다. ) 2. SVN 저장소..

    Vue.js Vue에서 배열(Array) 변경 감지하기

    Vue.js Vue에서 배열(Array) 변경 감지하기

    Vue의 반응성 시스템으로 데이터의 변경을 감지하고 화면에 다시 렌더링해줍니다. (ex. v-model 등) 하지만 배열의 변경을 Vue의 반응성 시스템이 감지할 수 있게 해주기 위해서는 배열의 특정 메서드를 사용해야 합니다 변경을 감지하는 배열(Array) 메서드 아래 메서드들은 Vue가 배열의 변경을 감지하고 반응형 시스템을 작동시킬 수 있게합니다. Vue에서 요소를 직접 수정하는 것이 아니라 아래 메서드를 이용하면 데이터를 업데이트 해줍니다. push: 배열의 끝에 요소 추가 pop: 배열의 마지막 요소 제거 shift: 배열의 첫 번째 요소 제거 unshift: 배열의 맨 앞에 요소 추가 splice: 배열에서 요소 추가 또는 제거 sort: 배열의 요소 정렬 reverse: 배열의 요소 순서 뒤..

    JS 깊은 복사와 얕은 복사: JS에서 객체 복사 방법과 차이점

    JS 깊은 복사와 얕은 복사: JS에서 객체 복사 방법과 차이점

    요약 깊은 복사: 깊은 복사는 객체를 완전히 새로운 객체로 복사합니다. 즉, 객체의 속성들과 중첩된 객체까지 재귀적으로 복사됩니다. 복사된 객체와 원본 객체는 독립적인 개체가 되어 중첩된 객체를 수정해도 서로에게 영향을 주지 않습니다. 얕은 복사: 얕은 복사는 객체를 복사할 때, 객체의 속성들은 복사되지만 중첩된 객체는 참조로 복사됩니다. 복사된 객체와 원본 객체는 동일한 중첩된 객체를 참조하게 됩니다. 즉, 중첩된 객체를 수정하면 복사된 객체와 원본 객체 모두에 영향을 줍니다. 참조 복사: 참조 복사는 객체를 복사하는 대신, 원본 객체를 참조하는 방식입니다. 복사된 객체와 원본 객체는 동일한 객체를 참조하게 됩니다. 즉, 하나의 객체를 수정하면 다른 객체에도 영향을 줍니다. 깊은 복사 (Deep Cop..

    Vue.js ref 속성으로 요소와 컴포넌트에 쉽게 접근하기

    Vue.js ref 속성으로 요소와 컴포넌트에 쉽게 접근하기

    ref 속성 ref 속성은 Vue 컴포넌트에서 DOM 요소나 자식 컴포넌트에 쉽게 접근하기 위한 핵심적인 기능입니다. ref 사용법 1) 요소 접근 출력 템플릿에서 요소에 `ref` 속성을 추가하여 해당요소를 참조할 수 있습니다. 위 예제 코드에서는 `Input`으로 지정하였습니다. 당연히 참조할 때 구분이 되어야하기 때문에 `ref` 속성에 지정하는 값은 유니크해야 합니다. `this.$refs`를 사용하여 `ref`로 지정한 요소에 접근(참조)할 수 있습니다. 위 예제는 `this.$refs.Input.value`으로 `ref="Input"`인 요소에 접근하여 value 속성 값을 가져와 console에 로그를 남기는 코드입니다. 속성은 단순히 값 뿐만이 아니라 이벤트도 실행할 수 있습니다. 아래 예..