728x90
728x90

Git


  1. git branch
  2. git add *
  3. git commit -m "메세지"
  4. git push origin 브랜치

Spring Boot


  1. 정적 파일 Resource 경로 설정 -> addResourceHandlers
  2. AOP

JPA


  1. 컬럼이 많을 때는 DynamicUpdate 어노테이션을 사용해 보자
  2. 영속성
  3. 1차 캐싱
  4. 삭제는 remove()
  5. persist()
  6. JPQL 실행시 flush 자동 호출
  7. flush 모드 설정 : FlushModeType.AUTO / FlushModeType.COMMIT - EntityManager setFlushMode() 사용
  8. 준영속성 : 영속성 -> 준영속성 : detach(Entity) 특정엔티티만, close() 종료, clear() 초기화
  9. 병합 : merge() 준영속성 -> 영속성
  10. @Entity : name을 설정하지 않으면 그대로 사용 / 기본 생성자는 필수 / final,enum,interface,inner 에는 사용할 수 없다. 저장할 필드에 final을 사용하면 안된다.
  11. @Table: name 생랴기 Entity 이름 사용 /
  12. @Enumerated : Java enum 매핑 / EnumType.String
  13. @Temporal : 날짜 타입 매핑
  14. @Lob: CLOB, BLOB 을 매핑
  15. 스키마 자동 생성 : 기존 테이블 지우고 다시 생성 / 개발에서만 사용하자
    # application.properties
    spring.jpa.hibernate.ddl-auto=update
    

XML

hibernate.hdm2ddl.auto value="create"

16. sql_show

#application.properties
spring.jpa.hibernate.sql_show=true

XML

hibernate.sql_how value="true"

17. 매핑 전략 변경
- hibernate.ejb.naming_strategy

18. nullable = false : not null 추가
19. length = 10 : 길이 추가
20. 유니크 제약 조건 : @table(name="..", uniqueConstraints={@UniqueConstraint(name="...",columnNames={"...","..."})})
21. @GeneratedValue : 기본 키 생성 전략
22. @Id 매핑 가능한 타입 : 기본 , Wrapper, String, Date, BigDemical, BigInteger
23. IDENTITY 전략 : MySql , postgresql, SQL Server : AUTO_INCREMENT 가 있는 밴더 : @GeneratedValue(strategy=GenerationType.IDENTITY)
24. SEQUENCE 전략: 오라클, postgresql : @SequenceGenerator(name="...",sequenceName="...",initialValue=1,allocationSize=1) +  @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="...")
25. Table 전략 : 키생성 전용 테이블을 만들어 사용 : @TableGenerator(name="...",table="...",pkColumnValue="...",allocationSize=1) +@GeneratedValue(strategy=GenerationType.TALBE,generator="...")
26. Auto 전략 : 자동 : @GeneratedValue(strategy=GenerationType.AUTO)
27. Transient: DB 매핑x
28. Access : JPA 접근 방식 지정
29. @Column : name, nullable , length ,(BigDemical,BigInteger) percision, scale
30. @Colomn 생략지 자바 타입이 기본 타입일 경우를 주의하자
31. @Enumerated : EnumType.ORDINAL enum에 정의된 순서, EnumType.String enum정의된 이름 그대로, 
32. @Temporal: Date,Calendar 등 날짜타입 TemporalType.DATE , TemporalType.TIME, TemporalType.TIMESTAMP, 생략시 Timestamp
33. @Access : 엔티티 접근방식 : AccessType.FIELD 필드 직접 접근, AccessType.PROPERTY 접근자 : 사용 생략시 @Id 위치에 따라 접근
34. 연관 관계
35. 방향 : 단방향, 양방향
36. 다중성: N:1, 1:N, 1:1, N:M
37. OWNER : 양방향으로 만들면 OWNER 를 정해야한다.
38. N:1 단방향 연관관계 : x는 하나의 y , y에는 여러 x, 게시물은 1명의 유저, 유저는 여러개의 게시물
39. x에는 y로 접근하는 필드 존재 , x에서는 y로 접근가능 , y에서는 x로 접근 불가
40. @ManuToOne : optional, fetch, cascade, targetEntity: 연관관계 엔티티 타입
41. @JoinColumn(name="연관관계 테이블 컬럼")
728x90

'개발일기' 카테고리의 다른 글

[TIL #8]  (0) 2023.06.09
[TIL#9]  (2) 2023.06.09
[TIL #4]  (0) 2023.05.03
[TIL #3]  (0) 2023.05.02
[TIL#2]  (0) 2023.04.27
728x90
웹 페이지 레이아웃에서 "header"는 일반적으로 페이지 상단에 위치한 영역으로, 페이지의 로고, 메뉴, 검색 창 등 중요한 내용을 담고 있습니다. 이를 통해 사용자가 웹 사이트에서 어디에 있는지, 그리고 원하는 정보를 쉽게 찾을 수 있도록 도와줍니다.
Header는 일반적으로 사이트의 브랜드, 제목, 로고 등과 같은 정보를 제공하며, 일반적으로 메뉴와 검색 기능이 포함됩니다. 일부 웹 사이트에서는 헤더 영역에서 사용자가 많이 찾는 정보를 제공하기도 합니다.

 

 

이전까지 Layout 을 통해서 헤더-컨텐츠-푸터로 이루어지도록 만들었습니다.

이번에는 Header를 좀더 원하는 방향으로 완성 시켜 보려고 합니다.

 

3부분으로 이루진 Layout에 상간에 위치한 Header에는 최종적으로 로고 + 사이드바 버튼이 들어 가게 됩니다.

 

1. 로고 이미지 import 

2. 좌측 으로 배치

3. 사이드바 버튼 import 

4. 우측으로 배치

 

이 순서대로 진행 되지 않을까 싶네요.

먼저 로고 이미지를 배치 시켜 보겠습니다.

// components/Header/index.js
import "./header.css";
import logo from "../../resources/svg/logo.svg";

export default function Header() {
  return (
    <header>
      <div id="logo">
        <img src={logo} alt="logo" />
      </div>
      <div id="gnb"></div>
    </header>
  );
}

 

이미지가 header보다 커서 맞지가 않네요.

이미지 크기를 조정 시켜 줍니다.

 

header {
  height: var(--headerHeight);
  width: 100%;
}
header > #logo {
  height: calc(100% - 32px);
  padding: 16px;
}
header > #logo > img {
  max-height: 100%;
}

 

 

padding을 줘서 간격을 주고 max-height 로 높이를 조절해 줬습니다.

알맞게 들어간 듯?

 

 

이제 사이드바 버튼을 추가 해 봐야겠습니다.

icon은 font-awesome을 사용하려고 합니다.

설치해 줍니다.

https://fontawesome.com/docs/web/use-with/react/

 

npm i --save @fortawesome/fontawesome-svg-core @fortawesome/free-solid-svg-icons @fortawesome/react-fontawesome@latest

 

FontAwesome 컴포넌트에 icon props 의 값으로 faBars를 넣어서 div#gnb 태그 안에 넣어 줍니다.

// components/Header/index.js
import { faBars } from "@fortawesome/free-solid-svg-icons";
import { FontAwesomeIcon } from "@fortawesome/react-fontawesome";
import logo from "../../resources/svg/logo.svg";
import "./header.css";

export default function Header() {
  return (
    <header>
      <div id="logo">
        <img src={logo} alt="logo" />
      </div>
      <div id="gnb">
        <FontAwesomeIcon icon={faBars} />
      </div>
    </header>
  );
}

 

 

그런데 로고 밑에 붙어 버려서 내려가 버렸습니다.

float 속성을 줘서 오른쪽에 붙여 봅니다.

 

header {
  height: var(--headerHeight);
  width: 100%;
}
header > #logo {
  height: calc(100% - 32px);
  padding: 16px;
}
header > #logo > img {
  max-height: 100%;
}

header > #gnb {
  float: right;
}

오른쪽으로 이동하긴 했지만, 헤더 아래로 위치 해 있습니다.

 

float:left 값을 #logo에 추가해 줍니다. 주고 div#gnb에도 padding 과 height 값을 줍니다.

 

header {
  height: var(--headerHeight);
  width: 100%;
}
header > #logo {
  height: calc(100% - 32px);
  padding: 16px;
  float: left;
}
header > #logo > img {
  max-height: 100%;
}

header > #gnb {
  float: right;
  padding: 16px;
  height: calc(100% - 32px);
}

 

잘나오는 것 같습니다만, 사이즈가 맞질 않네요

font-size 를 24px로 줘봅니다.

 

header {
  height: var(--headerHeight);
  width: 100%;
}
header > #logo {
  height: calc(100% - 32px);
  padding: 16px;
  float: left;
}
header > #logo > img {
  max-height: 100%;
}

header > #gnb {
  float: right;
  padding: 16px;
  height: calc(100% - 32px);
  font-size: 24px;
}

원하는 데로 잘 들어 간 것 같습니다 !

다름은 사이드바를 한번 작업해 봐야겠습니다.

 

 

PortFolio : https://hiio420.com  

Figma: https://www.figma.com/file/WJVwsW99LwZ2B1W3PKDASM/Hiio420?node-id=0%3A1&t=W1IV0P9M12hXOVpp-1

 

 

728x90
728x90

레이아웃(Layout)은 웹페이지나 애플리케이션의 UI(User Interface)를 설계하는데 매우 중요한 요소입니다. React에서 레이아웃을 만드는 것은 HTML과 CSS를 사용하는 일반적인 웹 개발과 비슷하지만, React에서는 컴포넌트(Component)를 사용하여 레이아웃을 구성합니다.

최종적으로는 위와 같은 결과물을 만드는 것이 목표입니다.

 

 

1. Layout 구성

 

레이아웃 구성은 크게 4부분으로 이루어져 있습니다.

헤더 - 컨텐츠 + 사이드바 - 푸터 여기서 사이드바는 헤더에 추가될 버튼으로 나왔다가 사라졌다가 할거기 때문에

헤거 - 컨텐츠 - 푸터 크게 3부분으로 우선 나누어 줄 예정입니다.

 

2. 디렉토리 생성

components 디렉토리에 Layout 디렉토리를 만들고 index.js 파일을 하나 만들어 줍니다.

추가적으로 Header 와 Footer 도 마찬가지로 만들어 줍니다.

2. 코드 작성

먼저 Header/index.js에 Header 컴포넌트를 하나 만들어 줍니다.

// components/Header/index.js

export default function Header() {
  return <header></header>;
}

Footer 도 마찬가지로 만들어 주겠습니다.

// components/Footer/index.js

export default function Footer() {
  return <footer></footer>;
}

이제 Layout/index.js 에 Layout 컴포넌트를 만들어 주면 됩니다. 

main 태그로 헤더 - 컨텐츠 - 푸터를 감싸고, 컨텐츠 부분은 section 태그에 id = "content"를 사용해 주겠습니다.

section#content 에는 props 중 children 속성을 넣어 주면, Layout 컴포넌트를 사용하는 컴포넌트들을 동일한 Layout을 가지는 것으로 만들어 줄 수 있습니다.

 

// Layout/index.js

import Footer from "../Footer";
import Header from "../Header";

export default function Layout({ children }) {
  return (
    <main>
      <Header />
      <section id="content">{children}</section>
      <Footer />
    </main>
  );
}

3. Layout으로 감싸주기

우선은 main 화면을 제외하고는 만들어 져있는 메뉴들의 페이지들은 모두 같은 Layout을 사용한다고 생각하고, 각 컴포넌트를 Layout으로 감싸주면 될것같습니다. 그런데 그러면 비효율적일 수도 있다는 생각이 들어 App.js 에서 Layout 을 import 해서 각 페이지 Route 들을 한번에 감싸 줍니다.

 

 

import { BrowserRouter, Route, Routes } from "react-router-dom";
import "./App.css";
import Layout from "./components/Layout";
import Main from "./pages/Main";
function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <Routes>
          {/* Main */}
          <Route path="/" element={<Main />} />
        </Routes>
        <Layout>
          <Routes>
            {/* Introduction */}
            {/* Work */}
            {/* Demo */}
            {/* Component */}
          </Routes>
        </Layout>
      </BrowserRouter>
    </div>
  );
}

export default App;

 

그런데 아직 모든 페이지가 컴포넌트들을 하나도 안만들었기 때문에 Test 컴포넌트를 하나 만들어서 Layout의 스타일만 우선 지정해 보겠습니다.

 

4. Style

Test 컴포넌트를 하나 생성해 줍니다.

// components/Test/index.js

export default function Test() {
  return <div>테스트 입니다.</div>;
}

App.js 에 Route로 추가 해 줍니다.

 

import { BrowserRouter, Route, Routes } from "react-router-dom";
import "./App.css";
import Layout from "./components/Layout";
import Main from "./pages/Main";
import Test from "./components/Test";
function App() {
  return (
    <div className="App">
      <BrowserRouter>
        <Routes>
          {/* Main */}
          <Route path="/" element={<Main />} />
        </Routes>
        <Layout>
          <Routes>
            {/* Introduction */}
            {/* Work */}
            {/* Demo */}
            {/* Component */}

            {/* Test */}
            <Route path="/test" element={<Test />} />
          </Routes>
        </Layout>
      </BrowserRouter>
    </div>
  );
}

export default App;

localhost:3000/test 주소로 접속해 보면 아래와 같이 나오게 됩니다.

우선 처음 구상한 헤더-컨텐츠-푸터 3부분으로 이루어진 Layout 스타일을 만들기 위해서 

flex 속성을 사용하려고 합니다.

layout.css 파일을 만들어서 import 해주고 각 태그의 style을 지정해 줍니다.

main {
  display: flex;
  flex-direction: column;
  height: 100%;
  min-height: 500px;
  max-width: 1200px;
  width: 100%;
  margin: 0 auto;
}

header {
  height: var(--headerHeight);
  width: 100%;
  background-color: aqua;
}

section#content {
  width: 100%;
  flex-grow: 1;
  background-color: crimson;
}

footer {
  height: var(--footerHeight);
  width: 100%;
  background-color: blanchedalmond;
}

PortFolio : https://hiio420.com  

Figma: https://www.figma.com/file/WJVwsW99LwZ2B1W3PKDASM/Hiio420?node-id=0%3A1&t=W1IV0P9M12hXOVpp-1

 

 

728x90
728x90

React 프로젝트를 CRA 로 시작하게 되면 기본적인 리액트 로고가 favicon으로 들어가 있게 됩니다.

이러한 로고를 새로만든 제 로고로 변경해보고자 합니다.

 

온라인 사이트에는 favicon을 만들어 주는 사이트가 많이 있습니다. 저는 예전부터 주로 사용했던 favicon-generator에서 로고 이미지를 업로드해서 사이즈별 이미지를 다운로드 받아 적용시켜 보려고 합니다.

https://www.favicon-generator.org/ 

 

1. Logo File 업로드 && Generate

우선 사이트에 접속하면 위와 같은 화면을 만날 수 있습니다.

파일선택부분을 클릭해 로고 파일을 업로드 해 줍니다. 저는 1024*1024 사이즈의 로고이미지를 만들었습니다.

업로드 후에 몇사기 선택을 할 수가 있습니다.

여기에서 저는 Web,Android,MS,IOS 에 쓰이는 ICON도 함께 만들어 주려고 합니다. 이유는?? 나중에!

Include ~~public~~과 Maintain~~은 헤제해 줍니다.

그런다음 Create Favicon을 클릭해 Favicon을 만들어 줍니다.

 

 

2.Download && 적용

 

 

Create를 진행하면 다운로드 받을 수 있는 페이지로 이동하고, head에 입력하는 코드가 나옵니다.

우선 다운로드!

 

다운로드 받은 zip 파일의 압출을 풀면 그 안에 사이즈별 ICON과 Manifest.json등등 파일이 있습니다.

우선 이 file을 public 디렉토리 안에 icon 디렉토리를 새로 생성하고 복사해 줍니다.

이제 이 ICON들을 적용 시켜 주기 위해서  public에 있는 index.html 의 head에 있는 코드를 수정해 줍니다.

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Web site created using create-react-app" />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" />


    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />


    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>

  </body>
</html>

이 중에서 수정해야할 부분은 <link rel="icon" href="%PUBLIC_URL%/favicon.ico" /> 의 경로를 수정해 주고 

<link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" /> 은 삭제 처리 해 줍니다.

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/icon/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Web site created using create-react-app" />


    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />


    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>

  </body>
</html>

이제 사이트에 있는 코드를 head에 붙여 넣어 줍니다.

 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/icon/favicon.ico" />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta name="description" content="Web site created using create-react-app" />


    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" />


    <link rel="apple-touch-icon" sizes="57x57" href="%PUBLIC_URL%/icon/apple-icon-57x57.png">
    <link rel="apple-touch-icon" sizes="60x60" href="%PUBLIC_URL%/icon/apple-icon-60x60.png">
    <link rel="apple-touch-icon" sizes="72x72" href="%PUBLIC_URL%/icon/apple-icon-72x72.png">
    <link rel="apple-touch-icon" sizes="76x76" href="%PUBLIC_URL%/icon/apple-icon-76x76.png">
    <link rel="apple-touch-icon" sizes="114x114" href="%PUBLIC_URL%/icon/apple-icon-114x114.png">
    <link rel="apple-touch-icon" sizes="120x120" href="%PUBLIC_URL%/icon/apple-icon-120x120.png">
    <link rel="apple-touch-icon" sizes="144x144" href="%PUBLIC_URL%/icon/apple-icon-144x144.png">
    <link rel="apple-touch-icon" sizes="152x152" href="%PUBLIC_URL%/icon/apple-icon-152x152.png">
    <link rel="apple-touch-icon" sizes="180x180" href="%PUBLIC_URL%/icon/apple-icon-180x180.png">
    <link rel="icon" type="image/png" sizes="192x192"  href="%PUBLIC_URL%/icon/android-icon-192x192.png">
    <link rel="icon" type="image/png" sizes="32x32" href="%PUBLIC_URL%/icon/favicon-32x32.png">
    <link rel="icon" type="image/png" sizes="96x96" href="%PUBLIC_URL%/icon/favicon-96x96.png">
    <link rel="icon" type="image/png" sizes="16x16" href="%PUBLIC_URL%/icon/favicon-16x16.png">
    <!-- <link rel="manifest" href="/manifest.json"> 삭제 !!-->
    <meta name="msapplication-TileColor" content="#ffffff">
    <meta name="msapplication-TileImage" content="%PUBLIC_URL%/icon/ms-icon-144x144.png">
    <meta name="theme-color" content="#ffffff">

    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>

  </body>
</html>

그런데 icon 들을 icon 디렉토리에 넣었으므로 경로를 수정해 주어야 합니다. 기존 경로에 %PUBLIC_URL%/icon 을 추가해 줍니다. 

그리고 manifest 파일은 위에서 설정되어 있으므로 삭제 처리 해줍니다.

 

추가적으로 기존 mainfest.json에 있는 icons의 항목에 다운로드 받은 mainfest.json을 추가해줍니다.

{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "icon/favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "logo192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "logo512.png",
      "type": "image/png",
      "sizes": "512x512"
    },
    {
      "src": "icon/android-icon-36x36.png",
      "sizes": "36x36",
      "type": "image/png",
      "density": "0.75"
    },
    {
      "src": "icon/android-icon-48x48.png",
      "sizes": "48x48",
      "type": "image/png",
      "density": "1.0"
    },
    {
      "src": "icon/android-icon-72x72.png",
      "sizes": "72x72",
      "type": "image/png",
      "density": "1.5"
    },
    {
      "src": "icon/android-icon-96x96.png",
      "sizes": "96x96",
      "type": "image/png",
      "density": "2.0"
    },
    {
      "src": "icon/android-icon-144x144.png",
      "sizes": "144x144",
      "type": "image/png",
      "density": "3.0"
    },
    {
      "src": "icon/android-icon-192x192.png",
      "sizes": "192x192",
      "type": "image/png",
      "density": "4.0"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

마찬가지로 기존 경로에 icon 을 추가 해 주었습니다.

 

 

서버를 reload하면 

파비콘이 바뀐걸 확인 할 수 있습니다. 

 

 

PortFolio : https://hiio420.com  

Figma: https://www.figma.com/file/WJVwsW99LwZ2B1W3PKDASM/Hiio420?node-id=0%3A1&t=W1IV0P9M12hXOVpp-1

 

 

728x90
728x90
https://docs.github.com/ko/pages/getting-started-with-github-pages/creating-a-github-pages-site

 

github pages를 사용하기 위해서는 3가지가 필요합니다.

1. git

2. github repo

3. gh-pages

먼저 https://git-scm.com/downloads 에서 파일을 다운로드 받아 설치해 줍니다.

 

 

 

 

github에 회원가입 후 접속하면 repository를 만들 수 있습니다.

 

New 버튼을 클릭하면 repository 생성 페이지로 이동하게 되고, 필요한 내용을 작성합니다.

github pages를 사용하기 위해서 repository는 <username>.github.io 의 이름을 가져야하고, public으로 만들어줘야 합니다.

 

 

 

 

git 초기화 후 원격 레포지토리를 등록해 줍니다.

git init
git remote add origin "https://github.com/hongsamhc2/hongsamhc2.github.io.git"

gh-pages 를 이용해 배포를 진행하기위해서 설치해 줍니다.

npm install gh-pages --save-dev

package.json 의 scripts 부분에 명령어를 추가해 줍니다.

    "deploy": "gh-pages -d build",
    "predeploy": "npm run build"​

이제 npm run deploy를 실행하면 build 후에 생성된 파일들이 원격 레포지토리 gh-pages 브랜치에 반영되게 됩니다.

 

npm run deploy

github의 settings 탭에서 pages로 들어갑니다.

Branch 섹션에서 gh-pages를 선택하고 save해 줍니다.

 

원격 레포지토리에 코드를 올리고 실제 사이트에 반영되기 위해서는  조금 시간이 필요합니다.

이제 https://hongsamhc2.github.io/ 에 접속하면 build된 코드가 반영된것을 볼 수 있습니다.

728x90
728x90
728x90

+ Recent posts