Skip to content

yubje/MEMODY

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

๐Ÿ“– Memody Project

versionvuespringspring-bootmysqlhtmlcssjavascriptaws-s3aws-ec2

๐Ÿ  Memody Homepage


๐Ÿ“‚ Contents


๐Ÿ–ฅ๏ธ Shared Your Blog

  • ๋‹ค์–‘ํ•œ ๋ถ„์•ผ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ณ , ์ง์ ‘ ๋ธ”๋กœ๊ทธ๋ฅผ ๋งŒ๋“ค์–ด ์šด์˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๊ฐœ์ธ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์ˆ˜๊ฐ€ ๋ธ”๋กœ๊ทธ๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

  • ๋ธ”๋กœ๊ทธ ๋‚ด์šฉ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ณ„ ๊ตฌ์ถ•

    • ํƒ€ ๋ธ”๋กœ๊ทธ์˜ ๊ฒŒ์‹œ๊ธ€์„ Forkํ•˜์—ฌ ๋‚ด ๋ธ”๋กœ๊ทธ๋กœ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๊ธฐ์ €๊ธฐ ํผ์ ธ์žˆ๋Š” ๋‹ค์–‘ํ•œ ์ •๋ณด๋“ค์„ ๋‚ด ๋ธ”๋กœ๊ทธ๋กœ ๋ชจ์„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋žญํ‚น ์‹œ์Šคํ…œ ๋„์ž…

    • ๋ธ”๋กœ๊ทธ์˜ ์กฐํšŒ์ˆ˜, ๊ฒŒ์‹œ๊ธ€์ด Fork๋œ ํšŸ์ˆ˜๊ฐ€ ๋งŽ์•„์งˆ์ˆ˜๋ก ์˜ํ–ฅ๋ ฅ์žˆ๋Š” ๋ธ”๋กœ๊ฑฐ๊ฐ€ ๋œ๋‹ค.
    • ๋žญํ‚น ์‹œ์Šคํ…œ์„ ํ†ตํ•ด ์œ ๋ช…ํ•œ ๋ธ”๋กœ๊ฑฐ๊ฐ€ ๋˜๊ธฐ ์œ„ํ•ด ๋‹ค์–‘ํ•˜๊ณ  ์œ ์ตํ•œ ์ •๋ณด๋“ค์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒํƒœ๊ณ„๊ฐ€ ํ˜•์„ฑ๋œ๋‹ค.

๐Ÿ“ƒ ๊ธฐ์ˆ  ์Šคํƒ

image

BACKEND

  1. Programming Languages : [ Java 8 ]
  2. Frameworks : [ Spring ]
    • Tool : [ Spring boot ]
  3. SQL data storage : [ MySQL ]
  4. Key-value storage : [ Redis ]
  5. Web Server : [ Nginx ]
  6. Web application server : [ Apache Tomcat ]
  7. Hosting : [ AWS ]

FRONTEND

  1. Programming Languages : [ JavaScript, HTML5, CSS3 ]
  2. JavaScript Framework : [ Vue.js ]

๐Ÿ“ƒ ์‚ฌ์šฉ ๊ธฐ์ˆ 

Spring boot : Memody Project์˜ ์ „๋ฐ˜์ ์ธ ๊ธฐ๋Šฅ Rest Controller ๊ตฌํ˜„

Swagger : Swagger๋ฅผ ์ด์šฉํ•˜์—ฌ RESTful API ๋ฌธ์„œ ์ž๋™ํ™” (http://i3a306.p.ssafy.io:8499/swagger-ui.html)

Spring Security + JWT : ๋กœ๊ทธ์ธํ•œ ์‚ฌ์šฉ์ž๋งŒ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉ๊ฐ€๋Šฅ ํ•˜๋„๋ก(filter), Token์„ ๊ณ„์† ๊ฒ€์‚ฌํ•ด์„œ ์œ ํšจํ•œ ํšŒ์›์ธ์ง€ ํ™•์ธ

Spring Data JPA: JpaRepository๋ฅผ ์ƒ์†๋ฐ›์•„ ์ฟผ๋ฆฌ ์ž‘์„ฑ์„ ํ•˜์ง€ ์•Š๊ณ  DB Table์˜ ๊ฐ์ฒด๋กœ ์ ‘๊ทผํ•˜๊ฒŒ ํ•˜์—ฌ ๊ธฐ๋Šฅ๋“ค์„ ๊ตฌํ˜„

XSS Filter : ๋„ค์ด๋ฒ„์—์„œ ์ œ๊ณตํ•˜๋Š” lucy-xss-servlet-filter ๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„๋กœ ๋ณด๋‚ด๋Š” ์ž…๋ ฅ ๊ฐ’์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋ณด๋‚ด์„œ

๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ž์‹ ์ด ๋งŒ๋“  ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰์‹œ์ผœ์„œ ์‚ฌ์šฉ์ž์˜ ์ •๋ณด๋ฅผ ๋นผ๋‚ด๋Š” XSS ๊ณต๊ฒฉ์— ๋Œ€๋น„ํ•˜๋„๋ก ๊ตฌํ˜„

MySql : ์‚ฌ์šฉ์ž ๋ฐ ๋ธ”๋กœ๊ทธ, ๊ฒŒ์‹œ๊ธ€ ๋“ฑ Memody PJT์—์„œ ํ•„์š”ํ•œ Data๋ฅผ ์ €์žฅ

Redis : Key์™€ value๊ฐ€ ๋งคํ•‘๋œ ๋‹จ์ˆœํ•œ ๋งต ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๋กœ์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ ˆ๋””์Šค์— ์‰ฝ๊ณ  ํŽธํ•˜๊ฒŒ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Memody PJT์—์„œ๋Š” ๋กœ๊ทธ์•„์›ƒํ•œ ์‚ฌ์šฉ์ž์˜ ํ† ํฐ์„ ๋งŒ๋ฃŒ์‹œ๊ฐ„๊นŒ์ง€ ์ €์žฅํ•ด๋‘๋Š” ๋ธ”๋ž™๋ฆฌ์ŠคํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜์˜€๊ณ , ์ด๋ฉ”์ผ ์ธ์ฆ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์—์„œ ์‚ฌ์šฉ์ž ์ด๋ฉ”์ผ๊ณผ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ redisTemplate์„ ์‚ฌ์šฉํ•˜์—ฌ key, value๋กœ ์ €์žฅํ•˜๊ณ , ์ธ์ฆ ์ฝ”๋“œ ์‚ฌ์šฉ์ด ์™„๋ฃŒ๋˜๋ฉด ์‚ญ์ œ๋ฅผ ํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„

AWS : EC2 ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ Ubuntu ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•(ํ˜ธ์ŠคํŒ…), S3 ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ์—…๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์ถ•

Nginx : ์›น์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•

Vue.js: Memody Project์˜ Frontend ๊ธฐ๋Šฅ ๊ตฌํ˜„

Vue router: ์ค‘์ฒฉ๋œ ๋ผ์šฐํŠธ/๋ทฐ ๋งคํ•‘, ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜์˜ ๋ผ์šฐํ„ฐ ์„ค์ •, ์„ธ๋ฐ€ํ•œ ๋„ค๋น„๊ฒŒ์ด์…˜ ์ปจํŠธ๋กค

Vuex: Vue.js ์ค‘์•™ ์ง‘์ค‘์‹ ๊ด€๋ฆฌ (User, Main, Blog๋กœ ๋‚˜๋ˆ„์–ด ๊ตฌํ˜„)

JavaScript: Frontend์˜ ์ƒํƒœ ๋ฐ ์•ก์…˜ ๊ด€๋ฆฌ

Html: Frontend์˜ View ๊ตฌํ˜„

css: Frontend์˜ ์Šคํƒ€์ผ ์ ์šฉ

Vuetify: Frontend ๋””์ž์ธ ๋ฐ ๋ ˆ์ด์•„์›ƒ ์„ค์ •

Axios: http ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ๋น„๋™๊ธฐ ํ†ต์‹  ์š”์ฒญ ์ฒ˜๋ฆฌ

vue-cookies: User ์ •๋ณด ์ฟ ํ‚ค ์„ค์ •


๐Ÿ“ƒ Commit | Merge | Pull

  • ์‹œ๊ฐ„

    • AM 10:00 | PM 16:00 ์—

    • ์ผ์ฃผ์ผ์— ํ•œ๋ฒˆ์€ develop์— MR

    • Front / Back ์— ๊ฐ์ž Feature๋ฅผ MR, develop Pull ํ•˜์—ฌ ์ตœ์‹ ํ™”

  • Commit Message Rule

    {JIRA issue ID} | {์ง„ํ–‰์ƒํ™ฉ} | {๊ธฐ๋Šฅ ๋ช…}

    ex) S03P11A305-1 | Done | ํšŒ์›๊ฐ€์ž…

    ex) S03P11A305-2 | In Progress| ํšŒ์›์ •๋ณด ์ˆ˜์ •

    [๋งˆ๋ฌด๋ฆฌ] | {๋‚ ์งœ }| README.md

    • ex) [๋งˆ๋ฌด๋ฆฌ] | 2020.07.21 | README.md

    [MR] | {๋‚ ์งœ} | '{์†Œ์Šค๋ธŒ๋žœ์น˜}' into '{ํƒ€๊ฒŸ๋ธŒ๋žœ์น˜}'

    ์ง„ํ–‰์ƒํ™ฉ

    • Todo
    • In Progress
    • Done

๐Ÿ“ƒ ์—ญํ•  ๋ถ„๋‹ด

  • PM

    ๐Ÿ•ตโ€โ™‚ ๋ฏผ๊ฒฝ

  • Frontend

    ๐Ÿ‘ฉโ€๐Ÿ’ป ์œ ๋นˆ ๐Ÿ‘จโ€๐Ÿ’ป ์žฌ์˜ ๐Ÿ‘ฉโ€๐Ÿ’ป ์œ ์ง„

  • Backend

    ๐Ÿ‘จโ€๐Ÿ’ป ํ˜•ํƒ ๐Ÿ‘ฉโ€๐Ÿ’ป ๋ฏผ๊ฒฝ

๐Ÿ“ƒ Git Branch ์ „๋žต

  • Master

    • Develop

      • Front

        • FeatureFront/doc
        • FeatureFront/epic Name
      • Back

        • FeatureBack/doc
        • FeatureBack/epic Name

๐Ÿ“ƒ Jira

ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ ๋„๊ตฌ๋กœ Jira๋ฅผ ์‚ฌ์šฉ, Issue๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰
  • Epic : ์ „์ฒด์ ์ธ ํฐ ๊ธฐ๋Šฅ๋“ค์„ Epic์œผ๋กœ ๊ตฌ์„ฑ

    • Ex) Front / User Function (ํšŒ์› ๊ด€๋ฆฌ) , Back / Blog Function (๋ธ”๋กœ๊ทธ)
  • Story : Epic๊ณผ ์—ฐ๊ฒฐํ•˜๊ณ  Epic์— ๊ด€๋ จ๋œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„์ฃผ๋กœ ๊ตฌ์„ฑ

    • Ex) Front / Main Page , Back / Blog CRUD , Back / Spring Security
  • Bug : ํ…Œ์ŠคํŠธ ๊ณผ์ •์—์„œ ๋ฐœ๊ฒฌ๋œ bug๋ฅผ ๋“ฑ๋ก

    • Ex) Back / JWT Token update

๐Ÿ“ƒ Code convention

  • JavaScript

    ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๊ณต์‹๋ฌธ์„œ ์ฐธ๊ณ 

    exports default {
      created() {
        }
      },
      methods: {
        setInputValue(state) {
    	  console.log('example')
        },	
      },
    }

    Naming Convention

    ๊ธฐ๋ณธ์ ์œผ๋กœ Full Name์œผ๋กœ ์”์‹œ๋‹น

    ex) res => response, err => error (keyword ๊ฑธ๋ฆฌ๋Š”๊ฑด ์ œ์™ธ์ž…๋‹ˆ๋‹ค.)

    Whitespace [๋„์–ด์“ฐ๊ธฐ ๋ณด์„ธ์š”~~]

    • Use soft tabs set to 2 spaces.

      // bad
      function () {
      โˆ™โˆ™โˆ™โˆ™var name;
      }
      
      // bad
      function () {
      โˆ™var name;
      }
      
      // good
      function () {
      โˆ™โˆ™var name;
      }
    • Place 1 space before the leading brace.

      // bad
      function test(){
        console.log('test');
      }
      
      // good
      function test() {
        console.log('test');
      }
      
      // bad
      dog.set('attr',{
        age: '1 year',
        breed: 'Bernese Mountain Dog'
      });
      
      // good
      dog.set('attr', {
        age: '1 year',
        breed: 'Bernese Mountain Dog'
      });
    • Place 1 space before the opening parenthesis in control statements (if, while etc.). Place no space before the argument list in function calls and declarations.

      // bad
      if(isJedi) {
        fight ();
      }
      
      // good  ๋„์–ด์“ฐ๊ธฐ ๋ณด์„ธ์š” ~~
      if (isJedi) {
        fight();
      }
    • Set off operators with spaces.

      // bad
      var x=y+5;
      
      // good
      var x = y + 5;
    • Leave a blank line after blocks and before the next statement

      // bad
      if (foo) {
        return bar;
      }
      return baz;
      
      // good
      if (foo) {
        return bar;
      }
      
      return baz;
      
      // bad
      var obj = {
        foo: function () {
        },
        bar: function () {
        }
      };
      return obj;
      
      // good
      var obj = {
        foo: function () {
        },
      
        bar: function () {
        }
      };
      
      return obj;

    Commas

    • Leading commas: Nope.

      // bad
      var story = [
          once
        , upon
        , aTime
      ];
      
      // good
      var story = [
        once,
        upon,
        aTime
      ];

    Naming Convention

    • Use PascalCase when naming constructors or classes.

      // bad
      function user(options) {
        this.name = options.name;
      }
      
      var bad = new user({
        name: 'nope'
      });
      
      // good
      function User(options) {
        this.name = options.name;
      }
      
      var good = new User({
        name: 'yup'
      });
    // Keywords : 
    break,do,instanceof,typeof,case,else,new,var,catch,finally,return,void,continue,for,switch,while,
    debugger,function,this,with,default,if,throw,delete,in,try
    
    // Key๊ฐ’์„ ํ‚ค์›Œ๋“œ๋กœ ์žก์ง€ ๋ง๊ธฐ
    // good
    var superman = {
      defaults: { clark: 'kent' },
      hidden: true
    };

    Strings

    // String ์“ธ ๋•Œ '' ์“ฐ๊ธฐ 	
    // bad
    var name = "Bob Parr";
    
    // good
    var name = 'Bob Parr';

    Properties

    var luke = {
      jedi: true,
      age: 28
    };
    
    // bad
    var isJedi = luke['jedi'];
    
    // good
    var isJedi = luke.jedi;
    
    //Use subscript notation [] when accessing properties with a variable.
    var luke = {
      jedi: true,
      age: 28
    };
    
    function getProp(prop) {
      return luke[prop];
    }
    
    var isJedi = getProp('jedi');
  • Use === and !== over == and !=.

    • Objects evaluate to true

    • Undefined evaluates to false

    • Null evaluates to false

    • Booleans evaluate to the value of the boolean

    • Numbers evaluate to false if +0, -0, or NaN, otherwise true

    • Strings evaluate to false if an empty string '', otherwise true

    • use shortcuts

    • // bad
      if (name !== '') {
        // ...stuff...
      }
      
      // good
      if (name) {
        // ...stuff...
      }
      
      // bad
      if (collection.length > 0) {
        // ...stuff...
      }
      
      // good
      if (collection.length) {
        // ...stuff...
      }

    if elif else

    // bad
    if (test) {
      thing1();
      thing2();
    }
    else {
      thing3();
    }
    
    // good
    if (test) {
      thing1();
      thing2();
    } else 
      thing3();
    }

JAVA

  1. ๋ฌธ์„œ ์ฃผ์„
  • ํด๋ž˜์Šค ์„ค๋ช… ์ฃผ์„

    • import ๋ฌธ ๋‹ค์Œ์— ๊ธฐ์ˆ ํ•œ๋‹ค.

    • ๋ธ”๋ก์ฃผ์„์„ ์‚ฌ์šฉํ•œ๋‹ค.

    • ๊ฐ ๋ผ์ธ์€ *๋กœ ์‹œ์ž‘ํ•œ๋‹ค.

    • ํ•ด๋‹น ํด๋ž˜์Šค์— ๋Œ€ํ•œ ๊ธฐ๋Šฅ๊ณผ ์šฉ๋„ ๊ธฐ์ˆ ์„ ์ž‘์„ฑํ•œ๋‹ค.

    • ...
      ๋‚ด์šฉ์€ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    /* 
     * ํด๋ž˜์Šค ์ด๋ฆ„
     * <pre>
     * <b> History:</b>
     *		์ž‘์„ฑ์ž, ์ž‘์„ฑ ๋ฒ„์ „, ์ž‘์„ฑ ์ผ์ž, (์ตœ์ดˆ ์ž‘์„ฑ)
     * </pre>
     *
     * @author ์ž‘์„ฑ์ž ์ด๋ฆ„
     * @version 1.0, ์ˆ˜์ • ์ผ์ž, ๋‚ด์šฉ
     * @see None
     */
  • ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ์ฃผ์„

    • ํ•จ์ˆ˜์˜ ์ƒ๋‹จ์— ์œ„์น˜ํ•œ๋‹ค.
    • ๋ธ”๋ก ์ฃผ์„์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ ๊ธฐ๋Šฅ ์„ค๋ช…์€ ํ•œ ๋‘์ค„๋กœ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๊ธฐ์ˆ ํ•œ๋‹ค.
    • ๋ฉ”์†Œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ type๋ช…๊ณผ ๋ณ€์ˆ˜๋ช…์„ ์ ๊ณ  ๊ฐ„๋žตํ•˜๊ฒŒ ์„ค๋ช…ํ•œ๋‹ค.
    /**
     * ๋กœ๊ทธ์ธ - userId์™€ userPw๋กœ ํšŒ์› ํ™•์ธ 
     *
     * @param int userId - ์‚ฌ์šฉ์ž ์•„์ด๋””
     * @param int uwerPw - ์‚ฌ์šฉ์ž ํŒจ์Šค์›Œ๋“œ
     * @return ๋กœ๊ทธ์ธ ์„ฑ๊ณต ์—ฌ๋ถ€, ๋กœ๊ทธ์ธ ์„ฑ๊ณต์‹œ true return
     * @ exception ์˜ˆ์™ธ์‚ฌํ•ญ
     */
  • ์„ ์–ธ

    • ํ•œ ์ค„์— ํ•˜๋‚˜์˜ ์„ ์–ธ๋ฌธ ์‚ฌ์šฉ
    int			id; 		// ์‚ฌ์šฉ์ž ์•„์ด๋””
    int 		pw; 		// ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ
    Object 		time		// ๋“ฑ๋ก ์‹œ๊ฐ„   
  1. ๋“ค์—ฌ์“ฐ๊ธฐ
  • 1๋ฒˆ์˜ ํƒญ ๋˜๋Š” 4๋ฒˆ์˜ ๊ณต๋ฐฑ
  1. ์ค„ ๋‚˜๋ˆ„๊ธฐ
  • ํ•˜๋‚˜์˜ ์‹์ด ํ•œ ์ค„์— ๋“ค์–ด๊ฐ€์ง€ ์•Š์„ ๋•Œ

    • ์ฝค๋งˆ ํ›„์— ๋‘์ค„๋กœ ๋‚˜๋ˆˆ๋‹ค.

    • ์—ฐ์‚ฐ์ž ์•ž์—์„œ ๋‘์ค„๋กœ ๋‚˜๋ˆˆ๋‹ค.

    • ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 8๊ฐœ์˜ ๋นˆ ์นธ ์›์น™์„ ์‚ฌ์šฉํ•œ๋‹ค.

    • if ((condition1 && condition2)
      		|| (condition3 && condition4)
              ||!(condition5 && condition6)) {
          doSomethingAboutIt();
      }
      
  1. ๊ด„ํ˜ธ
  • ์—ฌ๋Š” ๊ด„ํ˜ธ ๋‹ค์Œ๊ณผ ๋‹ซ๋Š” ๊ด„ํ˜ธ ์ด์ „์—๋Š” ๊ณต๋ฐฑ์ด ์—†๋„๋ก ํ•œ๋‹ค.
  1. ๋ช…๋ช… ๊ทœ์น™
  • Packages
    • ํŒจํ‚ค์ง€ ์ด๋ฆ„์˜ ์ตœ์ƒ์œ„ ๋ ˆ๋ฒจ์€ ์†Œ๋ฌธ์ž, ๊ฐ€์žฅ ๋†’์€ ๋ ˆ๋ฒจ์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์ค‘ ํ•˜๋‚˜๋กœ ์„ค์ •ํ•œ๋‹ค.
    • ํŒจํ‚ค์ง€ ์ด๋ฆ„์˜ ๋‚˜๋จธ์ง€ ๋ถ€๋ถ„์€ ํ”„๋กœ์ ํŠธ ๋ช…์œผ๋กœ ์„ค์ •ํ•œ๋‹ค.
    • ํ•ด๋‹น ํ”„๋กœ์ ํŠธ์—์„œ๋Š” com.web.blog ๋กœ ์„ค์ •ํ•œ๋‹ค.
  • Classes
    • ํด๋ž˜์Šค ์ด๋ฆ„์€ ๋ช…์‚ฌ, ๋ณตํ•ฉ ๋‹จ์–ด์ผ ๊ฒฝ์šฐ ๊ฐ ๋‹จ์–ด์˜ ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์„ค์ •ํ•œ๋‹ค.
    • ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
  • Interfaces
    • ํด๋ž˜์Šค ์ด๋ฆ„๊ณผ ๊ฐ™์€ ๋Œ€๋ฌธ์ž ์‚ฌ์šฉ ๊ทœ์น™์„ ์ ์šฉํ•œ๋‹ค.
  • Methods
    • ๋ฉ”์†Œ๋“œ์˜ ์ด๋ฆ„์€ ๋™์‚ฌ, ๋ณตํ•ฉ ๋‹จ์–ด์ผ ๊ฒฝ์šฐ ์ฒซ ๋‹จ์–ด๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๊ทธ์ดํ›„์— ๋‚˜์˜ค๋Š” ๋‹จ์–ด์˜ ์ฒซ ๋ฌธ์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
      • run();
      • runMethod();
  • Variables
    • ๋ณ€์ˆ˜ ์ด๋ฆ„์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋Š” ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๊ณ , ๊ฐ ๋‚ด๋ถ€ ๋‹จ์–ด์˜ ์ฒซ ๋ฒˆ์งธ ๋ฌธ์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•œ๋‹ค.
    • ๊ทธ ๋ณ€์ˆ˜์˜ ์‚ฌ์šฉ ์˜๋„๋ฅผ ์•Œ์•„๋‚ผ ์ˆ˜ ์žˆ๋„๋ก ์˜๋ฏธ์žˆ๊ฒŒ ์„ค์ •ํ•œ๋‹ค.
  • Constants
    • ํด๋ž˜์Šค ์ƒ์ˆ˜๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋“ค์˜ ์ด๋ฆ„์€ ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ ์‚ฌ์šฉํ•˜๊ณ  ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋Š” ์–ธ๋”๋ฐ”(_)๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.
      • static final int MIN_WIDTH = 4;

Mysql ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ทœ์น™

  1. ๊ณตํ†ต
  • ์†Œ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • snake case๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  1. Table
  • ๋ณต์ˆ˜ํ˜•์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋ฅผ underbar๋กœ ์—ฐ๊ฒฐํ•˜์—ฌ snake case๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • vip_member
  • ๊ต์ฐจ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„์€ "_and_"๋กœ ์—ฐ๊ฒฐํ•œ๋‹ค
    • articles_and_movies
  1. Column
  • auto increment ์†์„ฑ์˜ PK๋ฅผ ๋Œ€๋ฆฌํ‚ค๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ, "ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ๋‹จ์ˆ˜ํ˜•"_id ์˜ ๊ทœ์น™์œผ๋กœ ๋ช…๋ช…ํ•œ๋‹ค.

  • ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋ฅผ underscore ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” snake case ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • foreign key ์ปฌ๋Ÿผ์€ ๋ถ€๋ชจ ํ…Œ์ด๋ธ”์˜ primary key ์ปฌ๋Ÿผ ์ด๋ฆ„์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

    • self ์ฐธ์กฐ์ธ ๊ฒฝ์šฐ, primary key ์ปฌ๋Ÿผ ์ด๋ฆ„ ์•ž์— ์ ์ ˆํ•œ ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ฐ™์€ primary key ์ปฌ๋Ÿผ์„ ์ž์‹ ํ…Œ์ด๋ธ”์—์„œ 2๋ฒˆ ์ด์ƒ ์ฐธ์กฐํ•˜๋Š” ๊ฒฝ์šฐ, primary key ์ปฌ๋Ÿผ ์ด๋ฆ„ ์•ž์— ์ ์ ˆํ•œ ์ ‘๋‘์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • boolean ์œ ํ˜•์˜ ์ปฌ๋Ÿผ์ด๋ฉด "_flag" ์ ‘๋ฏธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • date, datetime ์œ ํ˜•์˜ ์ปฌ๋Ÿผ์ด๋ฉด "_date" ์ ‘๋ฏธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

    article_id, movie_id : "ํ…Œ์ด๋ธ” ์ด๋ฆ„์˜ ๋‹จ์ˆ˜ํ˜•" + "_id"
    complete_flag : boolean ์œ ํ˜•์˜ ์ปฌ๋Ÿผ
    issue_date : ๋‚ ์งœ ์œ ํ˜•์˜ ์ปฌ๋Ÿผ
  1. Foreign Key
  • ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋ฅผ hyphen ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” snake case ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • "fk"-"๋ถ€๋ชจ ํ…Œ์ด๋ธ” ์ด๋ฆ„"-"์ž์‹ ํ…Œ์ด๋ธ” ์ด๋ฆ„"

    • ๊ฐ™์€ ๋ถ€๋ชจ-์ž์‹ ํ…Œ์ด๋ธ”์— 2๊ฐœ ์ด์ƒ์˜ foreign key๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, numberingํ•ฉ๋‹ˆ๋‹ค.

      fk-movies-articles : article ํ…Œ์ด๋ธ”์ด movie ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐ
      fk-admins-notices-1 / fk-admins-notices-2 : notices ํ…Œ์ด๋ธ”์ด admins ํ…Œ์ด๋ธ”์„ 2ํšŒ ์ด์ƒ ์ฐธ์กฐํ•˜์—ฌ numbering
  1. Index
  • ์ด๋ฆ„์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ฐ๊ฐ์˜ ๋‹จ์–ด๋ฅผ hyphen ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” snake case ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
  • ์ ‘๋‘์–ด
    • unique index : uix
    • spatial index : six
    • index : nix
  • "์ ‘๋‘์–ด"-"ํ…Œ์ด๋ธ” ์ด๋ฆ„"-"์ปฌ๋Ÿผ ์ด๋ฆ„"-"์ปฌ๋Ÿผ ์ด๋ฆ„"
uix-accounts-login_email

๐Ÿ“ƒ ์™€์ด์–ดํ”„๋ ˆ์ž„

About

Project built with Spring Boot & Vue.js

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published