전체 글 140

관점 지향 프로그래밍 (Aspect Oriented Programming, AOP)

AOP AOP는 애플리케이션의 구조적 향상을 위해 기존에 자바에서 사용하던 OOP방식을 좀더 보안하여 나온 개념이다. OOP에서는 class를 중점으로 모듈화*를 하였지만 AOP는 관점이라는 추상적인 개념을 중점으로 모듈화를 진행한다. 쉽게 설명하자면 OOP의 class들에서 어떠한 특정한 목적을 위해 공통으로 구현하는 프로세스(공통 관심)들을 또다시 분리하여 코드의 반복을 줄이고 유지보수에 더 용이하게함으로써 더욱 객체지향적 프로그래밍이 되도록 하는 기술이다. (개인적으로 노드JS의 미들웨어정도로 생각하니 이해하기 좀더 수월했다.) (*모듈화: 어떤 시스템의 구성요소가 분리되고 재결합 할 수 있게 만드는 행위) 이러한 AOP의 주 컨샙으로는 8가지가 존재한다. Aspect Join point Advic..

스프링 컨테이너

Spring container 스프링 컨테이너는 내부에 존재하는 애플리케이션 Bean(객체)의 생명주기 즉, 생성, 관리, 제거 등의 역할을 담당한다. 스프링 컨테이너는 XML, 애너테이션 기반의 자바 설정 클래스로 만들 수 있다. 과거에는 개발자가 XML을 통해 모두 설정해줬지만 Spring Boot를 사용하면서 XML설정 없이 사용이 가능해 졌다고 한다. 스프링 컨테이너를 사용하는 이유 스프링 컨테이너를 사용하게 되면서 객체들간의 의존관계를 정리하고 의존성을 낮추며 해당 객체들을 스프링에서 관리하여 개발자들은 비즈니스 로직에만 집중하기 더 쉬워 졌다. 스프링 컨테이너를 사용하기 이전에는 객체를 사용하기 위해 new 생성자를 사용하고 무수히 많은 객체들이 서로 참조하게 되어 의존성이 높아 객체지향프로그..

두 배열을받아 부분집합 찾아내기

쉬운문제이지만 여러가지 알고리즘을 활용해 비교해 보았다. 문제 두 개의 배열(base, sample)을 입력받아 sample이 base의 부분집합인지 여부를 리턴해야 합니다. 문제 입력 예시 public class Main { public static void main(String[] args) { Solution solution = new Solution(); int[] base = new int[]{7, 1, 2, 3, 4, 5}; int[] sample = new int[]{1, 3,7}; boolean test = solution.isSubsetOf(base, sample); System.out.println(test); } } 해결방법 스트림을 이용한 해결방법 class Solution { pu..

POJO

위의 그림은 Spring 삼각형 이라는 것으로 POJO라는 것은 Spring에서 사용하는 핵심 개념들인 IoC/DI, AOP, PSA를 통해 달성할 수 있다. POJO를 직역하면 순수한 자바 객체가 되는데 POJO프로그래밍이란 다른 기술이나 규약 혹은 특정 환경에 종속적이지 않고 순수 자바 객체만을 사용하는 프로그래밍이다. 즉, 특정한 다른 기술들을 변경하더라도 비지니스 로직에 영향을 주지 않도록 서로의 역할을 독립적으로 코드를 작성하는 프로그래밍이다. 예를 들면 MariaDB에서 MySQL로 데이터베이스가 바뀌더라도 비지니스 로직을 수정할 일이 없어야한다. 이와 같이 최대한 다른 환경이나 기술에 종속적이지 않도록 하기 위한 POJO 프로그래밍 코드를 작성하기 위해 Spring에서 지원하고 있는 3가지 ..

Mysql, safe update mode

위와같이 테이블과 데이터들을 생성해주고 title이 'article for Java'인 데이터의 body를 수정해주려고 했다. UPDATE content SET body ='this is an article about Java' WHERE title='article for Java' 기본적인 방식인 UPDATE를 사용해 주었는데 에러가 발생했다. Error Code: 1175. You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. To disable safe mode, toggle the option in Preferences -> SQL Editor and reconnect..

Personal Research 2023.03.31

MySQL 서브쿼리

MySQL의 서브쿼리에 대해 연습겸 실험을 진행 해봣다. 실험 예제 위의 그림과 같이 데이터베이스에 테이블들을 생성 및 관계를 형성해주었다. category의 name이 'homework'인 content의 title, created_at 그리고 user의 name을 찾기위한 쿼리를 작성하려고한다. 1. Join 활용 select user.name as username, content.title, content.created_at from user inner join content on user.id = content.userid inner join content_category on content.id = content_category.contentid inner join category on cont..

Personal Research 2023.03.31

관계형 데이터 베이스 설계

위와 같이 인스타그램의 관계도를 간략하게 만들어 봤다. (데이터베이스 설계도 툴: https://dbdiagram.io/home) 1:N 관계 users테이블의 id를 통해 followers, followings, posts, likes, comments 테이블들과 1:N 관계를 가지고 있다. 위의 관계도처럼 users에 관계를 설정하는 것이 아닌 다른 테이블들에 users의 id를 foriegn key(외래키)로 지정해서 관계를 맺어준 이유는 한명의 유저가 다른 테이블들의 많은 데이터를 가질수 있기 때문이다. posts테이블을 예를 들면 만약 users에 posts_id라는 column을 만들어 관계를 형성하게되면 한명의 유저가 많은 post들을 가지고 있게 되었을때 posts_id 컬럼은 수평적으로 ..

DB 2023.03.29

SQL vs NoSQL

SQL(구조화 쿼리 언어) vs. NoSQL(비구조화 쿼리 언어) 데이터베이스는 크게 관계형 데이터베이스(Relational Database, RDB)와 비관계형 데이터베이스로 구분한다. 관계형 데이터베이스는 SQL을 기반으로 하고, 비관계형 데이터베이스는 NoSQL로 데이터를 다룬다. SQL과 NoSQL은 만들어진 방식, 저장하는 정보의 종류, 그리고 저장하는 방법 등에 차이가 있다. 관계형 데이터베이스에서는 테이블의 구조와 데이터 타입 등을 사전에 정의(schema)하고, 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다. 관계형 데이터베이스는 행(row)과 열(column)로 구성된 테이블에 데이터를 저장한다. 각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에..

DB 2023.03.28

HTTP

HTTP는 HyperText Transfer Protocol의 줄임말로, HTML과 같은 문서를 전송하기 위한 Application Layer(TCP/IP 4계층의 4층)프로토콜이다. HTTP는 웹 브라우저와 웹 서버의 소통을 위해 디자인되었다. 전통적인 클라이언트-서버 모델에서 클라이언트가 HTTP messages 양식에 맞춰 요청을 보내면, 서버도 HTTP messages 양식에 맞춰 응답한다. HTTP는 stateless, 즉, 특정 상태를 유지하지 않는 특징이 있다. Stateless는 말 그대로 상태를 가지지 않는다는 뜻이다. HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않는다. 사용자는 쇼핑몰에 로그인하거나 상품을 클릭해서 상세 화면으..