전체 글 236

내맘대로 정리하는 Real MySQL #2장) 설치와 설정

시리즈는, 책을 읽으며 몰랐던 내용을 위주로 정리한 내용 그대로 포스팅하는 시리즈입니다 ^^ 원문의 문맥이 궁금하면 (좋은 책이니) 이 참에 하나 장만하는 것은 어떤가요?? 설치에 대해서는 정리하지 않는다. MySQL 서버는 단 하나의 설정 파일만 사용한다. 유닉스 계열에서는 my.cnf 라는 이름을 사용하고 윈도우 계열에서는 my.ini라는 이름을 쓴다. MySQL 서버는 시작될 때만 이 설정 파일을 참조하며, 처음 발견된 my.cnf 파일을 사용하게 된다. mysqld --verbose --help 혹은 mysql --help를 통해 설정 파일을 읽어들이는 경로 순서를 알 수 있다. mysqld : 서버 프로그램 mysql : 클라이언트 프로그램 MySQL 서버는 가동하면서 설정 파일의 내용을 읽어 ..

Spring Boot Interceptor에서 권한 관리하기 I (HttpServletRequest getInputStream 여러번)

백엔드를 리딩하며 개발하고 있는 사이드 프로젝트에서 권한을 꽤나 복잡하게 관리해야 하는 요구사항이 있었다. 사이드 프로젝트에서는 원격 근무 협업툴을 만들고 있는데, 협업툴 답게 Team이라는 개념이 있으며 여러 유저가 각기 다른 여러 Team에 가입할 수 있다. Team에 가입한 사용자들은 팀 내부에서 역할(ex 관리자, 일반 멤버)이 정해지며 각 역할에 따라 사용할 수 있는 기능이 달라진다. 또한, Team 내부에는 여러 Part가 있고 Part에서만 사용할 수 있는 기능들이 존재한다. 사용자와 팀, 파트 외에도 팀이 사용하고 있는 Plan에 따라서 (Free Plan, Premium Plan 등) 사용할 수 있는 기능도 달라져야 한다. 에헴... 서버는 어쨌거나 특정 API 호출 권한을 확인해야할 책..

Spring Boot SQL 보기 옵션 총 정리

Spring Boot에서 query DSL을 사용하건 spring boot JPA를 사용하건, 쿼리를 튜닝할 때 SQL을 봐야할 때가 있다. 그럴 때 사용할 수 있는 몇 가지 옵션을 조사해 보았다. 환경 : Spring boot 2.* + hibernate 5.3.10 이상 sql 보기 Hibernate이 DB에 날리는 모든 쿼리(DDL, DML)를 보여준다 application.yml을 사용한다면, spring: jpa: properties: hibernate: show_sql: true application.properties를 사용한다면, spring.jpa.properties.hibernate.show_sql=true 추가된 로그 Hibernate: select user0_.id as id1_0_..

DSL이란?

DSL : domain specific language DSL이란, 특정 영역을 타겟하고 있는 언어를 말한다 예를 들어 SQL! DB의 데이터를 참조하기 위해 날리는 query는 말 그대로 "DB에 데이터를 참조하기 위한 목적"으로만 사용되며 SQL로 웹 애플리케이션 서버를 만드는 것은 절대 불가능 하다. 반면 JAVA는 SQL을 만들어 낼 수도 있고 (사실상 SQL은 특정한 문법을 가진 문자열이기 때문이다) 웹 애플리케이션 서버를 만들 수도 있고, 그 외 원하는 모든 것을 만들어 낼 수 있다. 단지 다른 분야에선 다른 언어가 더 좋을 뿐이지 가능은 할 것이다. 이렇게 SQL처럼 어떤 목적이 있고 그 목적만 달성할 수 있는 언어를 DSL이라고 한다.

SQL group by와 having 이해하기

직원에 대한 테이블 emp가 있다고 하자 emp는 3가지 column을 가지고 있다. id : primary key dept : 근무 부서 번호 salary : 월급 이 테이블 안에는 다음과 같은 데이터들이 있다고 하자 (1, 1, 1000) // 1번 부서에서 1000원을 받고 일하는 사람 (2, 1, 2000) (3, 1, 3000) (4, 2, 4000) (5, 2, 5000) (6, 3, 6000) (7, 3, 7000) (8, 2, 8000) 이런 상황에서 내가 근무 부서 당 월급의 총합을 알고 싶다고 하자. group by를 모르는 상황에서는 이렇게 할 수 있다. 1. 우선 근무 부서 번호의 종류를 확인한다 SELECT DISTINCT(dept) FROM emp; 2. 그 다음 각 근무 부서 ..

SQL JOIN 이해하기

JOIN : 두 개 이상의 테이블이나 데이터베이스를 연결하여 검색하는 방법 보통 PK 또는 FK로 두 테이블을 연결함 Inner Join 교집합이라고 많이 설명한다. 여기서 교집합이라는 것은, 특정 조건에 맞는 행들만 포함시키고 그렇지 않은 행들은 제외시킨다는 뜻이다. 예를 들어, 두 테이블이 있다고 하자 유저(user) 테이블 id : PK name : 유저 이름 자동차(car) 테이블 id : PK user_Id : FK (유저 테이블) name : 자동차 이름 이 테이블에 다음과 같은 값들이 있다고 하자 유저(user) 테이블 (1, 김철수) (2, 홍길동) (3, 김영희) (4, 박상식) 자동차(car) 테이블 (1, 1, "SM3") (2, 1, "그렌져") (3, 2, "소나타") (4, 3,..