JSON과 메서드 - 자바스크립트(JS)
·
backend/Java
네트워크를 통해 객체를 어딘가에 보내거나 로깅 목적으로 객체를 출력해야 한다면 객체를 문자렬로 전환해야 할 것이다.이때 전환된 문자열엔 원하는 정보가 있는 객체 프로퍼티 모두가 포함되어야만 한다.let user = { name: "John", age: 30, toString() { return `{name: "${this.name}", age: ${this.age}}`; },};alert(user);JSON.stringifyJSON은 값이나 객체를 나타내주는 범용 포맷이다. JSON은 원래 자바스크립트에서 사용할 목적으로 만들어진 포맷이다. 하지만 라이브러리를 사용하면 자바스크립트가 아닌 언어에서도 JSON을 충분히 다룰 수 있어서, JSON을 데이터 교환 목적으로 사용하는 경우가 많다. J..
스레드 이해하기 - 자바 (JAVA)
·
backend/Java
최종 프로젝트를 기획하면서 결제 시스템의 동시성 문제를 조사하다 보니 수업 시간에 배웠던 스레드가 떠올랐다. 그래서 찾아보니 멀티 스레드 개념과 결제 시스템의 동시성 문제(트랜잭션 처리)와 연관 있다고 해서 수업 때 배웠던 스레드를 복습했다.📌프로세스란?실행 중인 프로그램을 의미한다.프로세스는 프로그램이 실행될 때마다 개별적으로 생성되며, 독립적인 메모리 공간과 자원을 할당받는다.하나의 프로세스는 프로그램을 수행하기 위해 필요한 코드, 데이터, 메모리 등 자원을 가지고 있으며, 그 안에 하나 이상의 스레드를 포함한다.📌스레드란?프로세스 내에서 할당된 자원을 이용해 실제 작업을 수행하는 작업 단위이다.모든 프로세스는 하나 이상의 스레드를 가지며 각각 독립적인 작업 단위를 가진다.예를 들어, 게임을 실행..
[자바] - 컬렉션
·
backend/Java
📌컬렉션(Collection)메모리상에서 자료를 구조적으로 처리하는 방법을 자료구조라 한다.컬렉션은 자바에서 제공하는 자료구조를 담당하는 프레임워크이다.자료구조를 사용해서 객체들을 효율적으로 추가, 삭제, 검색할 수 있도록 인터페이스와 구현 클래스를 java.util패키지에서 제공한다.📌자료구조데이터(자료)를 메모리에서 구조적으로 처리하는 방법론📌배열의 문제점과 컬렉션의 장점✔️배열의 문제점한 번 크기를 지정하면 변경할 수 없다.공간 크기가 부족하면 에러가 발생하고 이를 보완하기 위해 할당할 때 넉넉한 크기로 할당하면 메모리를 낭비하게 된다.필요에 따라 공간을 늘리거나 줄일 수 없다.배열에 기록된 데이터에 대한 중간 위치의 추가, 삭제가 불편하다.추가, 삭제할 데이터부터 마지막 기록된 데이터까지 하..
[Spring] JPA 이해하기
·
backend/Java
📌Java와 데이터베이스를 연동하는 다양한 방법들우선 Java에서는 데이터베이스와 연동할 수 있는 다양한 방법들이 있는데 간략하게 정리해 보겠다.: JDBC, MYBatis, Spring JDBC Template, JPA(Hibernate).. 등JDBCJava에서 가장 기본적인 DB 연결 방식. 드라이버 로드 → DB 연결 → SQL 작성 및 실행 → 결과 처리 → 자원 정리(close) SQL을 직접 작성하고 Connection, PreparedStatement, ResultSet 등을 이용해서 데이터를 처리.장점 : 단순하고, SQL을 직접 제어 가능하기 때문에 세세한 조작이 가능.단점 : 반복 코드 많고, 유지보수 어려움.MyBatis(SQL Mapper Framework)JDBC로 처리하는 상..
[Spring] MVC 요청 처리 과정 이해하기
·
backend/Java
Spring MVC 구조는 반드시 이해하고 알아둬야 할 개념이다. 아래가 Spring MVC 요청 처리 과정을 나타낸 그림이다.과정을 제대로 이해하기 위해 자세히 알아보자. (위 그림의 번호와 아래의 번호는 일치하지 않을 수 있다.)1. 클라이언트 요청 → Dispatcher Servlet이 요청을 받는다.2. DispatcherServlet →Handler Mapping → 요청 URL에 맞는 Controller와 메서드를 찾는다.3. Controller → 비즈니스 로직 실행(Service 호출, Model 데이터 준비)4. View 이름 반환 → Controller가 View이름 ("myboardlist") 반환5. DispatcherServlet → View Resolver에게 View 이름을 전..
[Spring] AOP(관점 지향 프로그래밍) 이해하기
·
backend/Java
spring에는 중요한 세 가지 개념이 있다.DI(의존성 주입), IOC(제어 반전), AOP(관점 지향 프로그래밍)이번 블로그 글은 AOP에 관해 공부할 것이다. 📌AOP란?프로그램은 비즈니스 로직(핵심 기능)과 공통 관심사(공통 기능)으로 나뉜다.AOP가 이를 깔끔하게 분리하기 위해 존재한다.일반적으로 사용하는 클래스에서 중복되는 공통 관심사(예. commit, rollback, log 처리)를 별도로 분리하고, 핵심 기능이 실행되기 전과 후의 시점에 해당 코드를 붙여 넣음으로써 소스 코드의 중복을 줄이고, 필요할때마다 가져다 쓸 수 있게 객체화하는 기술을 말한다. 📌AOP 구조 📌AOP 용어Advice공통 기능(예. 로깅, 트랜잭션 등) 자체를 말한다."실제 실행할 코드"JoinPointA..
[Spring] Annotation (어노테이션) 이해하기
·
backend/Java
수업에서 스프링 어노테이션에 대해 공부하였다.간단해보이지만 제대로 이해하지 못하면 사용할 수 없기 때문에 제대로 이해하기 위해 글을 작성하게 되었다.📌스프링 어노테이션(spring annotation)이란?스프링 프레임워크에서 XML설정을 줄이고, 코드에서 직접 의존성 주입(DI), 컴포넌트 스캔, AOP 등을 할 수 있게 해주는 자바 문법이다. 보통 @을 앞에 붙여 사용하고, 코드 사이에 주석처럼 쓰인다.위키백과에 따르면, 자바 어노테이션은 자바 소스 코드에 추가하여 사용할 수 있는 일종의 메타데이터라고 한다. → 메타데이터란 "데이터에 대한 데이터"를 의미하는데 예를 들어, 데이터 생성 수단, 데이터 목적, 생성 시각 및 날짜와 같은 것을 포함한다. 특정 데이터를 추적하고 작업하는 것을 더 ..
[자바] 입출력 스트림
·
backend/Java
📌입출력(IO)자바에서 데이터는 스트림을 통해 입출력된다. 스트림은 단방향으로 연속적으로 흘러가는 것을 말한다.현재 프로그램이 출발지인지 도착지인지에 따라 스트림을 다르게 사용한다.프로그램이 도착지인경우, 흘러들어온 데이터를 받기 위해 입력 스트림을 사용하고,프로그램이 출발지인경우, 데이터를 출력해야 하므로 출력 스트림을 사용한다.📌스트림스트림 : 통로의 크기바이트 기반 스트림통로가 바이트 단위의 크기, 그림, 멀티미디어 등의 바이너리 데이터를 읽고 출력할 때 사용InputStream문자 기반 스트림통로가 바이트 단위보다 큰 크기, 문자 데이터를 읽고 출력할 때 사용Reader다양한 기반 스트림 중 File이라고 붙어있는 건 기억할 것기반 스트림 : 실제 통로를 만드는것, 연결하는 것보조 스트림 : ..
[자바] - 상속과 다형성
·
backend/Java
📌상속상속은 보다 최소한의 코드를 작성해 보다 효율적으로 개발 시간을 절약하기 위해 사용된다.예를 들어 field1, field2, method1(), method2()를 가진 클래스가 있을 때, field1, method1()을 이미 가지고 있는 클래스가있다면 처음부터 다시 4개의 멤버를 작성하는 것보다 field2, method2()를 추가적으로 작성해주는것이 더 효율적일 것이다.이러한 경우 field1, method1()를 가진 클래스를 상속하여 field2, method2()의 부모 클래스가 되면 4개의 멤버를 다 사용할 수 있게 된다. 다시 말해, 겹치는 필드와 메소드를 가진 클래스가 있는 경우, 겹치는 멤버를 다시 코드를 작성하는 것보다 효율적으로 코드 작성을 최소화하여 그 클래스의 겹치는 ..
[자바] - 깊은 복사와 얕은 복사
·
backend/Java
자바에서 객체를 복사할 땐 얕은 복사와 깊은 복사가 있다.쉽게 생각하면 객체를 복사하고난 뒤에 복사한 객체의 값을 변경했을 때 원본 객체에 어떤 영향이 가는지 얕은 복사와 깊은 복사에 따라 다르다. 📌얕은 복사얕은 복사는 객체의 주소값만 가져와서 참조형 변수에 저장하고 한 객체를 두 변수가 같이 참조하는 것이다.그래서 얕은 복사를 한 후 객체의 값을 변경하면 같은 객체를 참조하고 있기 때문에 원본 객체의 값도 변경되는 것이다.✔️얕은 복사하는 법int[] arr1 = new int[] {1,2,3,4,5};int[] arr2 = arr1; //복사✔️얕은 복사 후 배열 값 변경//원본 배열 값 변경arr1[0]=99;//prn이라는 배열 출력하는 메소드 가정prn(arr1); //99 2 3 4 5pr..